简单题意:首先给出物品数量和手中资金,人后每样物品给出价格,需要购买时手中至少需要多少资金,还有物品本身的价值,要求求出最大资金。
解题思路:一定要按q-p排序,不要按价值排序。
代码如下:
#include <stdio.h>
#include <algorithm>
using namespace std; //crucial
#define N 500
#define M 5000
struct Item
{
int pi;
int qi;
int vi;
}items[N + 5];
int f[M + 5];
bool com(Item item1, Item item2)
{
return (item2.qi - item2.pi) > (item1.qi - item1.pi);
}
int main()
{
int n, m, i, j;
while (scanf("%d %d", &n, &m) != EOF)
{
for (i = 1; i <= n; i++)
scanf("%d %d %d", &items[i].pi, &items[i].qi, &items[i].vi);
sort(items + 1, items + n + 1, com);
for (i = 0; i <= m; i++)
f[i] = 0;
for (i = 1; i <= n; i++)
for (j = m; j >= items[i].qi; j--)
if (f[j] < f[j - items[i].pi] + items[i].vi)
f[j] = f[j - items[i].pi] + items[i].vi;
printf("%d\n", f[m]);
}
return 0;
}