HDU 3466 Proud Merchants(0-1背包)

http://acm.hdu.edu.cn/showproblem.php?pid=3466

题意:

最近,iSea去了一个古老的国家。在这么长的时间里,它是世界上最富有和最强大的王国。结果,这个国家的人民仍然非常自豪,即使他们的国家没有那么富有了。
商人是最典型的,每个人只卖一个项目,价格是Pi,但如果你的钱少于Qi,他们会拒绝与你交易,iSea评估每个项目一个值Vi。
如果他有M单位的钱,iSea可以获得的最大价值是多少?

思路:

这道题的话多加了一个Qi。

一定要注意,若要保证动归方程无后效性,dp[j-a[i].p]一定要比dp[j]先算,j最小为a[i].q,所以需按q-p从小到大排序

 #include<iostream>
#include<algorithm>
#include<cstring>
using namespace std; const int maxn = +; int n, m;
int dp[maxn]; struct node
{
int p, q, v;
}a[maxn]; bool cmp(node a, node b)
{
return a.q-a.p < b.q-b.p;
} int main()
{
//freopen("D:\\txt.txt", "r", stdin);
while (cin >> n >> m && n && m)
{
memset(dp, , sizeof(dp));
for (int i = ; i <= n; i++)
cin >> a[i].p >> a[i].q >> a[i].v;
sort(a + , a + + n, cmp);
for (int i = ; i <= n; i++)
{
for (int 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 ;
}
上一篇:[算法导论]merge sort @ Python


下一篇:idea 创建的spingmvc 引入jquery后jquery函数始终不执行的原因