[bzoj2748]音量调节
f[i][j]:1~i物品中是否可以达到j
f[i][j]=f[i-1][j+a[i]]||f[i-1][j-a[i]] (如果合法)
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <cstdlib> 5 #include <map> 6 #include <string> 7 #include <vector> 8 #include <stack> 9 #include <cmath> 10 #include <queue> 11 #include <cstdio> 12 using namespace std; 13 14 int n,a[1100],beg,en; 15 bool f[60][1100]; 16 int main(){ 17 scanf("%d%d%d",&n,&beg,&en); 18 for(int i=1;i<=n;i++)scanf("%d",&a[i]); 19 f[0][beg]=1; 20 for(int i=1;i<=n;i++) 21 for(int j=0;j<=en;j++) 22 { 23 if(j-a[i]>=0&&f[i-1][j-a[i]])f[i][j]=1; 24 if(j+a[i]<=en&&f[i-1][j+a[i]])f[i][j]=1; 25 } 26 for(int i=en;i>=0;i--)if(f[n][i]){printf("%d\n",i);return 0;} 27 printf("-1\n"); 28 }