hdu3466(01背包排序)
2017-07-31 22:20
204 查看
这道题外加了一个条件就是买价格为pi的物体时,剩余的钱不能小于qi,要做一些变动:排序
按照qi-pi的差排序
为什么。。我还在想。。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace
std;
struct node
{
int pi,qi,vi;
}a[505];
bool cmp(node a,node b)
{
return a.qi-a.pi<b.qi-b.pi;
}
int dp[50005];
int main()
{
int v,n;
while(~scanf("%d %d",&n,&v))
{
for(int i=0;i<n;i++)
scanf("%d %d %d",&a[i].pi,&a[i].qi,&a[i].vi);
memset(dp,0,sizeof(dp));
sort(a,a+n,cmp);
for(int i=0;i<n;i++)
{
for(int j=v;j>=a[i].qi;j--)
dp[j]=max(dp[j],dp[j-a[i].pi]+a[i].vi);
}
printf("%d\n",dp[v]);
}
return
0;
}
按照qi-pi的差排序
为什么。。我还在想。。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace
std;
struct node
{
int pi,qi,vi;
}a[505];
bool cmp(node a,node b)
{
return a.qi-a.pi<b.qi-b.pi;
}
int dp[50005];
int main()
{
int v,n;
while(~scanf("%d %d",&n,&v))
{
for(int i=0;i<n;i++)
scanf("%d %d %d",&a[i].pi,&a[i].qi,&a[i].vi);
memset(dp,0,sizeof(dp));
sort(a,a+n,cmp);
for(int i=0;i<n;i++)
{
for(int j=v;j>=a[i].qi;j--)
dp[j]=max(dp[j],dp[j-a[i].pi]+a[i].vi);
}
printf("%d\n",dp[v]);
}
return
0;
}
相关文章推荐
- Proud Merchants(01背包变形)hdu3466
- 01背包排序
- HDU3466 Proud Merchants (01背包变形)
- 【杭电oj】3466 - Proud Merchants(01背包,排序处理)
- hdu3466——Proud Merchants——————【01背包排序】
- HDU - 3466 - Proud Merchants (01背包 + 排序)
- CF----思维排序+01背包 山东省第八届省赛K题
- hdu3466 Proud Merchants 变形01背包
- 山东省第八届ACM省赛K题 CF(01背包,技巧得排序)
- HDU3466背包01
- HDU3466-Proud Merchants(01背包变形)
- hdu3466_01背包变形 理解无后效性
- hdu 3466 Proud Merchants (01背包 + 结构体的sort排序)
- HDU 3466 Proud Merchants ……(01背包 + 排序(物品的选择有先后顺序))
- hdu 3466 (01背包+思维排序)
- HDU 3466 Proud Merchants (01背包排序问题)
- hdu3466Proud Merchants (01背包,以q-p从小到大排序)
- hdu 3466 排序01背包
- 排序01背包 Problem W:Proud Merchants(HDU 3466)
- DP实例之01背包问题C语言实现