看到 5000*50000有点不敢做了……
其实bool数组很快
View Code
#include<stdio.h>
bool f[50009];
int a[5009];
int main()
{
int c,n;
while(scanf("%d%d",&c,&n)!=EOF)
{
int i,j;
for(i=1;i<=c;i++)
f[i]=0;
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
f[0]=1;
for(i=1;i<=n;i++)
{
for(j=c;j>=a[i];j--)
{
if(f[j-a[i]]==1)
f[j]=1;
}
if(f[c]==1)//加速尽十倍
break;
}
for(i=c;f[i]==0;i--);
printf("%d\n",i);
}
}
bool f[50009];
int a[5009];
int main()
{
int c,n;
while(scanf("%d%d",&c,&n)!=EOF)
{
int i,j;
for(i=1;i<=c;i++)
f[i]=0;
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
f[0]=1;
for(i=1;i<=n;i++)
{
for(j=c;j>=a[i];j--)
{
if(f[j-a[i]]==1)
f[j]=1;
}
if(f[c]==1)//加速尽十倍
break;
}
for(i=c;f[i]==0;i--);
printf("%d\n",i);
}
}