题目
https://www.luogu.org/problemnew/show/P2563
结题思路
先一个筛法求素数(220以内),然后就可以直接上动态转移方程: s[j]+=s[j−a[i]]; s [ j ] + = s [ j − a [ i ] ] ; 。很好理解,意会意会……..
代码
#include<cstdio>
#include<iostream>
using namespace std;
bool f[251];
int a[100],s[251],m,ans;
int main()
{
for (int i=2;i<=225;i++)
if (f[i]==false){
a[++ans]=i;
for (int j=i*2;j<=225;j+=i) f[j]=true;
}
s[0]=1;
for (int i=1;i<ans;i++)
for (int j=a[i];j<=225;j++)
s[j]+=s[j-a[i]];
while(cin>>m)
printf("%d\n",s[m]);
}