http://poj.org/problem?id=3132
求n由m个不同素数组成的可能方法有多少种
0-1背包问题 卡死我了
#include<stdio.h>
#include<string.h>
int prim[1000];
bool v[1130];
int len;
int dp[1131][15];
void GetPrime()
{
int i,j,k=0;
memset(v,true,sizeof(v));
for(i=2;i<=1130;i++)
{
if(v[i])
{
prim[k++]=i;
for(j=i*2;j<=1130;j+=i)
v[j]=false;
}
}
len=k;
}
void solve()
{
int i,j,k;
memset(dp,0,sizeof(dp));
dp[0][0]=1;
for(k=0;k<len;k++)
{
for(i=1130;i>=prim[k];i--)
{
for(j=1;j<=14;j++)
dp[i][j]+=dp[i-prim[k]][j-1];
}
}
}
int main()
{
int i,j,k;
int n,m;
GetPrime();
solve();
while(scanf("%d%d",&n,&m)&&n+m)
{
printf("%d\n",dp[n][m]);
}
return 0;
}