HDU 2546 饭卡
简单0-1背包
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const int maxn=1000+10; int A[maxn],dp[50000+10]; int main() { int i,j,n,m; while(~scanf("%d",&n)) { if(n==0) break; for(i=0; i<n; i++) scanf("%d",&A[i]); scanf("%d",&m); sort(A,A+n); memset(dp,0,sizeof(dp)); dp[0]=1; if(m<5) printf("%d\n",m); else { m=m-5; for(i=0; i<n-1; i++) for(j=m; j>=0; j--) if(dp[j]==1) dp[j+A[i]]=1; for(i=m; i>=0; i--) if(dp[i]) break; printf("%d\n",m-i+5-A[n-1]); } } return 0; }