BZOJ 2748 音量调节
这道题我开始做时想用搜索来做,但是失败了,后来仔细一想发现这就是一个背包问题,之后一切就简单多了。
代码如下:
#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; }