poj 3628 01背包
bug:忘了给dp[0]赋值为1了
#include<stdio.h>
#include<string.h>
bool dp[20000000];
int h[22];
int main()
{
int n,b,i,j,sum=0;
scanf("%d%d",&n,&b);
for(i=1;i<=n;i++)
{
scanf("%d",&h[i]);
sum+=h[i];
}
memset(dp,0,sizeof(dp));dp[0]=1;
for(i=1;i<=n;i++)
{
for(j=sum;j>=h[i];j--)
if(dp[j-h[i]]) dp[j]=1;
}
for(i=b;i<=sum;i++)
if(dp[i]) break;
printf("%d\n",i-b);
}

浙公网安备 33010602011771号