您的位置:首页 > 其它

POJ 3132

2016-09-19 22:34 323 查看
【题目分析】

素数筛+DP

【代码】

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
bool have[1201];
int pri[1200],top=0;
int dp[1121][15],n,m;
int main()
{
memset(have,false,sizeof have);
for (int i=2;i<=1200;++i)
{
if (!have[i]) pri[++top]=i;
for (int j=1;j<=top&&(pri[j]*i)<=1200;++j)
{
//          cout<<"out"<<pri[j]*i<<" "<<endl;
have[pri[j]*i]=true;
if (i%pri[j]==0) break;
}
}
memset(dp,0,sizeof dp);
dp[0][0]=1;
for (int i=1;i<=top;++i)
for (int j=1120;j>=pri[i];--j)
for (int k=1;k<=14;++k)
dp[j][k]+=dp[j-pri[i]][k-1];
while (scanf("%d%d",&n,&m)!=EOF&&n&&m)
printf("%d\n",dp
[m]);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  poj