您的位置:首页 > 其它

1024 ProblemX

2016-05-19 15:14 260 查看
题意:

给出n件物品,手里的总钱数m,每件物品的价值p,最低要有多少钱才能买q,购买的价格v 求最大价值。

思路:

这是一个背包问题,问题的关键就在于按什么顺序排序也就是先买哪个后买那个。

首先设有两个物品

p1,q1,v1—-A物品

p2,q2,v2—-B物品

如果先买A后买B,手里的钱至少需要q1+p2,如果先买B后买A 手里需要q2+p1,

假设先买A的代价下 那么就是 q1+p2

// ConsoleApplication32.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
#include<fstream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;

struct node
{
int p, q, v;
} a[555];

int cmp(node x, node y)
{
return x.q - x.p<y.q - y.p;
}

int main()
{
fstream cin("E:/C++/IN/aaa.txt");
int n, m, i, j;
int dp[5555];
while (cin>>n>>m&&n&&m)
{
for (i = 0; i < n; i++)
cin >> a[i].p >> a[i].q >> a[i].v;
memset(dp, 0, sizeof(dp));
sort(a, a + n, cmp);
for (i = 0; i<n; i++)
{
for (j = m; j >= a[i].q; j--)
{
dp[j] = max(dp[j], dp[j - a[i].p] + a[i].v);
}
}
cout << dp[m] << endl;
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: