题目地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=248

思路:刚开始用DP 写写费了,看了别人的解题报告才知道用贪心也可以解决,有时间再用DP写写

AC代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <climits>
#include <cmath>
#include <cctype>

const int inf = 0x7f7f7f7f;//2139062143
typedef long long ll;
using namespace std;

struct node
{
int price;
int num;
};

bool cmp(node a,node b)
{
return a.price < b.price;
}

int main()
{
int t;
int k,e,n;
scanf("%d",&t);
node a[110];
while(t--)
{
scanf("%d%d%d",&k,&e,&n);
int loc,price;
for(int i=0; i<n; i++)
{
scanf("%d%d%d",&loc,&a[i].num,&price);
a[i].price = (e - loc) + price;
}
sort(a,a+n,cmp);
int sum = 0;
for(int i=0; i<n; i++)
{
if(a[i].num >= k)
{
sum += k * a[i].price;
break;
}
else
{
k -= a[i].num;
sum += a[i].price * a[i].num;
}
}
printf("%d\n",sum);
}
return 0;
}