| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
在做这题时遇到了几个问题,在这希望一起能帮我解决下吧/*一开始dp[1121][15],数组开小了,从1117 开始就会出错了,为什么呢?*/
#include<cstdio>
#include<cstring>
bool f[1130];
__int64 i,j,jmax,a,b,t[200],dp[1130][15];
int main()
{
memset(f,true,sizeof(f));
f[1]=f[0]=false;
for(i=2;i*i<=1130;i++)
if(f[i])
{
for(j=i+i;j<=1130;j+=i)f[j]=false;
}
for(j=0,i=2;i<=1130;i++)
if(f[i])t[j++]=i;
while(scanf("%d%d",&a,&b))
{
if(a+b==0)break;
memset(dp,0,sizeof(dp));
dp[0][0]=1;
for(j=0;t[j]<=a;j++)
for(jmax=a;jmax>=t[j];jmax--)
for(i=1;i<=b;i++)
//for(i=b;i>=1;i--) 不是dp表还没填,就dp[0][0]=1,其余的都是0吗?
//我就产生问题了,首先这个写法为什么是对的,还有这个运行还比前者快些,为什么
dp[jmax][i]+=dp[jmax-t[j]][i-1];
printf("%I64d\n",dp[a][b]);
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator