http://acm.hdu.edu.cn/showproblem.php?pid=2546
01背包,开始内层循环写成v>=0无限wa。。。一定要注意数组越界的问题、、、
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <iostream> using namespace std ; int main() { int n; while(scanf("%d",&n),n) { int w[1010]; int maxx=0; int flag; for(int i=1;i<=n;i++) { scanf("%d",&w[i]); if(maxx<w[i]){ maxx=w[i]; flag=i; } } int m; scanf("%d",&m); if(m<5) printf("%d\n",m); else { int f[1010]; memset(f,0,sizeof(f)); for(int i=1;i<=n;i++) { if(i==flag)continue; for(int v=m-5;v>=w[i];v--) f[v]=max(f[v],f[v-w[i]]+w[i]); } printf("%d\n",m-f[m-5]-maxx); } } return 0; }