典型的0-1背包问题
#include<iostream>
using namespace std;
const int SIZE=40000;
int weight[SIZE],value[SIZE],DP[SIZE];
int main()
{
int N,M,i,j;
cin>>N>>M;
memset(weight,0,sizeof(weight));
memset(value,0,sizeof(value));
memset(DP,0,sizeof(DP));
for(i=0;i<N;i++)
cin>>weight[i]>>value[i];
for(i=0;i<N;i++)
for(j=M;j>=weight[i];j--)
if(DP[j-weight[i]]+value[i]>DP[j])
DP[j]=DP[j-weight[i]]+value[i];
cout<<DP[M]<<endl;
return 0;
}
本文介绍了一种解决0-1背包问题的经典算法实现。通过使用动态规划方法,该程序能够根据物品的价值和重量选择最优组合,使得总价值最大化且不超过背包容量限制。适用于初学者理解和实践动态规划思想。
2276

被折叠的 条评论
为什么被折叠?



