题目:
2 10 10 15 10 5 10 5 3 10 5 10 5 3 5 6 2 7 3
5 11
想法:动态规划。。方程是dp[j]=max(dp[j],dp[j-node[i].p]+node[i].v)
代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
const int MAXN=550;
struct Node
{
int p,q,v;
}node[MAXN];
int inline max(int a,int b)
{
return a>b?a:b;
}
int dp[5500];
bool cmp(Node a,Node b)
{
return a.q-a.p < b.q-b.p;
}
int main()
{
int n,i,m;
//freopen("r.txt","r",stdin);
while(cin>>n>>m)
{
for(i=0;i<n;i++)
cin>>node[i].p>>node[i].q>>node[i].v;
sort(node,node+n,cmp);
memset(dp,0,sizeof(dp));
for(i=0;i<n;i++)
for(int j=m;j>=node[i].q;j--)
dp[j]=max(dp[j],dp[j-node[i].p]+node[i].v);
cout<<dp[m]<<endl;
}
return 0;
}
好难。。
本文介绍了一种使用动态规划解决特定物品选择问题的方法。详细解释了输入格式、输出要求和示例输入输出,提供了相应的代码实现。通过分析每件商品的价格、价值和最低购买金额,目标是最大化在给定预算内获得的价值。
1135

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



