这个问题是01背包,而对于编程之美那道是完全背包问题,在编程之美中也有一个0,1背包问题。
而且是容量是小于等于,不是等于,对于是否等于,在初始化参数时候不一样,不小于全部初始化为0,恰好等于,初始化为无穷大,除了0.问什么呢?看算法入门竞赛那本,
背包问题其实不是很好理解,但是代码最终形式很简单,我要学会将问题抽象出来e利用此方法求解
#include<iostream>
#include<memory.h>
using namespace std;
const int N=30000;
int dp[N];
int main()
{
int len;
cin>>len;
while(len--)
{
memset(dp,0,sizeof(dp));
int V;
cin>>V;
int n;
cin>>n;
while(n--)
{
int size;
int value;
cin>>size;
cin>>value;for(int j=V;j>=size;j--)
{dp[j]=max(dp[j],dp[j-size]+value*size);
}
}
cout<<dp[V]<<endl;}
system("pause");
}
时间: 2024-10-25 17:16:07