首页 > 其他分享 >51nod 1383 整数分解为2的幂

51nod 1383 整数分解为2的幂

时间:2024-09-06 09:26:03浏览次数:10  
标签:const 这题 51nod long int 整数 dp 1383

整数分解为2的幂

这题非常厉害,建议认真看下去虽然我讲的也不好

首先肯定先想到的是多重背包,可以把每个次幂当作物品,然后套板子。

但是这题有 \(O(n)\) 复杂度的做法,我们想如果一个数 \(i\) 是奇数,那他只能由 \((i-1)+1\) 转化过来(2的幂次只有1是奇数),那方案数就是 \(i-1\) 的方案数。如果是偶数,首先他也可以由上一个数 \(+1\) 转移过来,但他还可以由 \(i/2\) 构成的每个数 \(\times 2\) 转移过来。

对了还可以打表找规律,这是找规律的网站

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e6+10;
const int mod=1e9+7;
int n; 
int dp[N];

int main(){
	ios::sync_with_stdio(false);
	cin>>n;
	dp[0]=1;
	dp[1]=1;
	for(int i=1;i<=n;i++){
		dp[i]=dp[i-1];
		if(!(i&1)){//偶数 
			dp[i]=(dp[i]+dp[i>>1])%mod;
		}
	}
	cout<<dp[n];
    return 0;
}

标签:const,这题,51nod,long,int,整数,dp,1383
From: https://www.cnblogs.com/sadlin/p/18399616

相关文章

  • 51nod 2180 争渡
    争渡原题链接常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。——李清照《如梦令·常记溪亭日暮》给出线段上界和下界,要在严格递增地在区间内选数,问到最后一条线段的方案数。见上图,第\(i\)条线段\(j\)点的方案数为\(i-1\)条线段的\(j-1\)......
  • 【力扣13】罗马数字转整数
    13.罗马数字转整数-力扣(LeetCode)根据前后字母代表数值大小,确定是加上还是减去该值(罗马数字的辨识规则)把字母映射成一个数字:使用哈希表"unordered_map"然后从前往后枚举每一个字符,比较大小,确定加上还是减去这个值classSolution{public:intromanToInt(strings){......
  • 在Python中如何输入整数?
    Python中的整数是一种基本数据类型,用于表示不带小数点的数字。整数可以是正数、负数或零。而且在Python中,整数类型没有大小限制,可以表示任意大的整数,那么Python如何输入整数?以下是具体内容介绍。在Python中,有两种主要方法可以输入整数:使用input()函数input()函数......
  • Python——求一个整数的阶乘是多少?
    没注释的源代码factorial=1number=int(input("请输入你计算阶乘的数字:"))ifnumber<0:  print("{}!没有阶乘".format(number))elifnumber==0:  print("{}!等于1".format(number))else:  foriinrange(1,number+1):    factorial......
  • 力扣刷题--13. 罗马数字转整数【简单】
    题目描述罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符数值I1V5X10L50C100D500M1000例如,罗马数字2写做II,即为两个并列的1。12写做XII,即为X+II。27写做XXVII,即为XX+V+II。通常情况下,罗马数字中小的数字在大的数字的右边。但......
  • 2024-09-04:用go语言,给定一个长度为n的数组 happiness,表示每个孩子的幸福值,以及一个正
    2024-09-04:用go语言,给定一个长度为n的数组happiness,表示每个孩子的幸福值,以及一个正整数k,我们需要从这n个孩子中选出k个孩子。在筛选过程中,每轮选择一个孩子时,所有尚未选中的孩子的幸福值都会减少1。需要注意的是,幸福值不能降低到负数,只有在其为正数时才能减少。我们的目标是......
  • 51nod 2842 城际旅行
    原题链接这题因为要求满足t时间内,所以用dp,不过我们的状态比较特殊,\(dp[i][j]\)表示到\(i\)点时经过\(j\)个点的最短时间,因为题目为DAG所以要用拓扑排序,每到一个点,枚举所有出边,更新出点的状态\(f[v][j+1]=min(f[v][j+1],f[u][j])\),最后的答案就是所有\(f[t][j]\let......
  • 51nod 1366 贫富差距
    51nod1366贫富差距这题题面挺抽象的,一个人与他所以的朋友的钱不能超过\(d\),问朋友链上钱最多的人的钱与钱最少的人的钱相差多少,求差距的最大值。如果两个人不属于同一个连通块那么差距可以无穷大,好了特殊情况解决了。然后为了使这个差距最大,那么对于每个朋友我们都取\(d\)......
  • 信息学奥赛初赛天天练-82-NOIP2014普及组-完善程序-机器语言、汇编语言、高级语言、计
    1NOIP2014普及组基础题11以下哪个是面向对象的高级语言()A汇编语言BC++CFortranDBasic2TB代表的字节数是()A2的10次方B2的20次方C2的30次方D2的40次方3二进制数00100100和00010101的和是()A00101000B001010......
  • 线性整数规划建模精解
    线性整数规划(LinearIntegerProgramming)是一种优化问题,它的目标是在满足一系列线性约束条件的情况下,最大化或最小化一个线性目标函数。整数规划(IntegerProgramming)是一类特殊的线性规划问题,其中某些或所有的决策变量必须取整数值。这种限制使得整数规划在某些情况下更符合实际需......