[ CodeVS冲杯之路 ] P1014

  不充钱,你怎么AC?

  题目:http://codevs.cn/problem/1014/

 

      一道不用考虑价值的DP题,那么我们可以用 0 和 1 表示是否能够达到该步骤

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<iostream>
 6 #include<algorithm>
 7 using namespace std;
 8 
 9 int v,n,a[31];
10 bool f[31][20001];
11 int main()
12 {
13     int i,j,ans=0;
14     scanf("%d%d",&v,&n);
15     for (i=1;i<=n;i++) scanf("%d",&a[i]);
16     for (j=1;j<=v;j++) f[0][j]=0;
17     f[0][0]=1;
18     for (i=1;i<=n;i++)
19     {
20         for (j=0;j<=v;j++)
21         {
22             f[i][j]=f[i-1][j];
23             if (!f[i][j]&&j-a[i]>=0) f[i][j]=f[i-1][j-a[i]]&1;
24             if (f[i][j]) ans=max(ans,j);
25         }
26     }
27     printf("%d\n",v-ans);
28     return 0;
29 }

 

posted @ 2016-09-11 11:42  Hadilo  阅读(126)  评论(0编辑  收藏  举报