约翰遭受了重大的损失:蟑螂吃掉了他所有的干草,留下一群饥饿的牛.他乘着容量为C(1≤C≤50000)个单位的马车,去顿因家买一些干草. 顿因有H(1≤H≤5000)包干草,每一包都有它的体积Vi(1≤Vi≤C).约翰只能整包购买,
他最多可以运回多少体积的干草呢?
Input
Line 1: Two space-separated integers: C and H
Lines 2..H+1: Each line describes the volume of a single bale: V_i
Output
Line 1: A single integer which is the greatest volume of hay FJ can purchase given the list of bales for sale and constraints.
Sample Input
7 3
2
6
5
Sample Output
7
Hint
The wagon holds 7 volumetric units; three bales are offered for sale with volumes of 2, 6, and 5 units, respectively.
Buying the two smaller bales fills the wagon.
AC代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int c,h;
cin>>c>>h;
int a[5001],f[50001];
for(int i=0;i<h;++i)
cin>>a[i];
memset(f,0,sizeof(f));
for(int i=0;i<h;i++)
for(int j=c;j>=a[i];j--)
f[j]=max(f[j],f[j-a[i]]+a[i]);
cout<<f[c];
return 0;
}
一维动态规划解决01背包问题。
注:按照课本代码,即设置重量和价值一致,建立二维数组f[][],得出的数值正确,但无法AC。