[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 }
View Code

 

posted @ 2017-01-01 17:17  KingSann  阅读(90)  评论(0编辑  收藏  举报