hiho第六周——01背包(动态规划)
题目链接:http://hihocoder.com/problemset/problem/1038
注意点
1、观察公式,减少空间复杂度为O(M)。
可执行代码
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
fstream cin("input.txt");
int N,M;//礼品,奖券
cin>>N>>M;
int * need = new int[N];
int * value = new int[N];
int * best = new int [M];
for(int i = 0;i<M;i++)
{
best[i] = 0;
}
for(int i = 0;i<=N;i++)
cin>>need[i]>>value[i];
for(int i = 0;i<N;i++)
{
int j = M-1;
while(j>=0&&j>=need[i])
{
best[j] = max(best[j],best[j-need[i]]+value[i]);
j--;
}
}
cout<<best[M-1]<<endl;
delete[] need;
delete[] value;
delete[] best;
return 0;
}