這道題我開始作時想用搜索來作,可是失敗了,後來仔細一想發現這就是一個揹包問題,以後一切就簡單多了。ios
代碼以下:spa
#include<cstdio> #include<iostream> #include<cstdlib> using namespace std; int i_number,i_begin,i_max; int i_change[1001]; bool f[51][1001]; int main() { scanf("%d%d%d",&i_number,&i_begin,&i_max); for(int i=1;i<=i_number;i++) { scanf("%d",&i_change[i]); } f[0][i_begin]=1; for(int i=1;i<=i_number;i++) { for(int j=0;j<=i_max;j++) { if(j+i_change[i]<=i_max) { if(f[i-1][j+i_change[i]]) { f[i][j]=1; } } if(j-i_change[i]>=0) { if(f[i-1][j-i_change[i]]) { f[i][j]=1; } } } for(int i=i_max;i>=0;i--) { if(f[i_number][i]) { printf("%d",i); return 0; } } } printf("-1"); return 0; }