洛谷P6065 [USACO05JAN]Sumsets S 题解

上一篇题解貌似没有 code?那窝来补一篇。

description:

给出一个整数 N N ,求将 N N 分解为若干个 2 2 的次幂的和的方案数。‘’

solution:

这道题可以使用递推

我们由小向大推,分情况讨论:

  • i i 为奇数:那么只能是 i 1 i-1 这个数加上一个 2 0 2^0 得来的。

  • i i 为偶数:可能和上述过程一样,也可能是 i 2 \dfrac{i}{2} × 2 \times 2 得来。

所以递推的柿子就显而易见了。

code:

#include<cstdio>
using namespace std;
long long f[1000005];//日常懒得动脑/kk
int main()
{
	int n;
	scanf("%d",&n);
	f[1]=1;//初始化
	for(int i=2;i<=n;i++)
	{
		if(i%2==1)
		{
			f[i]=f[i-1]%1000000000;
		}
		else
		{
			f[i]=(f[i-1]+f[i/2])%1000000000;
		} 
	}
	printf("%lld\n",f[n]%1000000000);//这个模数真是。。。别漏看,也别想当然成10^9+7
	return 0;
} 
发布了386 篇原创文章 · 获赞 163 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/kkkksc03/article/details/104250868