[BZOJ1606] [Usaco2008 Dec] Hay For Sale 购买干草 (dp)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[BZOJ1606] [Usaco2008 Dec] Hay For Sale 购买干草 (dp)相关的知识,希望对你有一定的参考价值。

Description

  约翰遭受了重大的损失:蟑螂吃掉了他所有的干草,留下一群饥饿的牛.他乘着容量为C(1≤C≤50000)个单位的马车,去顿因家买一些干草.
  顿因有H(1≤H≤5000)包干草,每一包都有它的体积Vi(l≤Vi≤C).
  约翰只能整包购买,他最多可以运回多少体积的干草呢?

Input

    第1行输入C和H,之后H行一行输入一个Vi.

Output 

    最多的可买干草体积.

Sample Input

7 3 //总体积为7,用3个物品来背包
2
6
5
 
  The wagon holds 7 volumetric units; three bales are offered for sale with volumes of 2, 6, and 5 units, respectively.

Sample Output

7 //最大可以背出来的体积

HINT

  Buying the two smaller bales fills the wagon.

Source

  Silver

Solution

  裸0/1背包,不用担心超时,数据非常弱。需要用滚动数组减小空间复杂度。

技术分享
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int a[5005];
 4 bool f[50005];
 5 int main()
 6 {
 7     int ans, c, h;
 8     scanf("%d%d", &c, &h);
 9     for(int i = 1; i <= h; i++)
10         scanf("%d", a + i);
11     f[0] = true;
12     for(int i = 1; i <= h; i++)
13         for(int j = c - a[i]; ~j; j--)
14             if(f[j]) f[j + a[i]] = true;
15     for(int i = 1; i <= c; i++)
16         if(f[i]) ans = i;
17     printf("%d\\n", ans);
18     return 0;
19 }
View Code

 

 

以上是关于[BZOJ1606] [Usaco2008 Dec] Hay For Sale 购买干草 (dp)的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ——1606: [Usaco2008 Dec]Hay For Sale 购买干草

BZOJ1606: [Usaco2008 Dec]Hay For Sale 购买干草

[BZOJ1606] [Usaco2008 Dec] Hay For Sale 购买干草 (dp)

[BZOJ1606] [Usaco2008 Dec] Hay For Sale 购买干草 (dp)

bzoj1606[Usaco2008 Dec]Hay For Sale 购买干草

bzo1606: [Usaco2008 Dec]Hay For Sale 购买干草