P1832 A+B Problem(再升级)题解
这是本蒟蒻第一次写题解,请多多指教!
未读题的请回!本篇不讲题意!
解题思路
枚举i(素数i),用素数判断函数zhi判读是否是枚举的数是否为素数。再用dp存贮个数。切记dp[0]要初始化为1。鄙人寻找许久(约半个小时,其余题解无此提醒!)。
代码
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
long long n,dp[100000001]={0};//完全背包dp数组
bool zhi(int x)//素数筛选
{
for(int i=2;i<x;i++)
if(x%i==0)return false;
return true;
}
int main(void)
{
scanf("%lld",&n);
dp[0]+=1;//切记dp[0]=0
for(int i=2;i<=n;i++)
if(zhi(i))
for(int j=i;j<=n;j++)//dp累加(完全背包正循环)
dp[j]+=dp[j-i];
printf("%lld\n",dp[n]);
return 0;
}