hdu 3466 Proud Merchants(0/1背包)

简介: 点击打开链接hdu 3466 思路: 0/1背包 分析: 1 这一题和"hdu2546 饭卡"有点像,但是又有不同,不同的是这一题每一个物品都有一个限制的值Q[i],求最大的价值 2 题目明确提到每一种物品只能卖一次或这不卖,那这明显就是0/1的性质,但是现在多了一个条件钱不能少于Q[i]。

点击打开链接hdu 3466

思路: 0/1背包
分析:
1 这一题和"hdu2546 饭卡"有点像,但是又有不同,不同的是这一题每一个物品都有一个限制的值Q[i],求最大的价值
2 题目明确提到每一种物品只能卖一次或这不卖,那这明显就是0/1的性质,但是现在多了一个条件钱不能少于Q[i]。这边的话我各种YY无果之后,果断看了题解,发现是要按照q-p排序,然后再做dp。
3 经过一番的YY之后,我明白了为什么按照q-p是正确的。我们都知道dp有一个很重要的特点就是无后效性,如果没有金钱的限制的话我们进行求解dp是肯定没有后效性的,但是有了金钱的限制之后完全就不一样了。
for (i=1; i<=n; i++)
    for (j=m; j>=q[i]; j--)
    dp[j]=max(dp[j],dp[j-p[i]]+v[i]);
要保证dp方程无后效性 j-p[i]一定要比j先算,那么当算i时,最小能算到q[i]-p[i],这样保证后面的可以用到前面的状态,因此以q[i]-p[i]排序即可保证无后效性。

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

const int MAX = 510;
const int MAXN = 5010;

struct Node{
    int p;
    int q;
    int v;
    bool operator<(const Node& s)const{
        return (q-p) < (s.q-s.p); 
    }
};
Node node[MAX];
int n , m , dp[MAXN];

int solve(){
    memset(dp , 0 , sizeof(dp));
    sort(node+1 , node+1+n);
    for(int i = 1 ; i <= n ; i++){
        for(int j = m ; j >= node[i].q; j--)    
            dp[j] = max(dp[j] , dp[j-node[i].p]+node[i].v); 
    }
    return dp[m];
}

int main(){
    while(scanf("%d%d" , &n , &m) != EOF){
        for(int i = 1 ; i <= n ; i++) 
            scanf("%d%d%d" , &node[i].p , &node[i].q , &node[i].v); 
        printf("%d\n" , solve());
    }
    return 0;
}



目录
相关文章
|
存储 前端开发 安全
GET 和 POST 请求:理解它们之间的区别和适用场景
GET 和 POST 请求:理解它们之间的区别和适用场景
|
芯片 C++ 异构计算
DDR的Controller、Channel、Chip、Rank、Bank、Row、Column、Sided
DDR的Controller、Channel、Chip、Rank、Bank、Row、Column、Sided
4102 0
DDR的Controller、Channel、Chip、Rank、Bank、Row、Column、Sided
|
文件存储 数据安全/隐私保护 Windows
Mac如何通过SMB访问Win11的共享文件?
Mac如何通过SMB访问Win11的共享文件?
2686 0
|
Go
Golang读取配置文件实现(yaml)
Golang读取配置文件实现(yaml)
521 0
Golang读取配置文件实现(yaml)
|
存储 Kubernetes jenkins
k8s-部署jenkins
jenkins部署 jenkins和k8s集成 jenkins基于k8s,执行pipline
k8s-部署jenkins
|
JSON JavaScript 前端开发
Node.js 18 新版发布,天猪带你解读新特性
Node.js 18 新版发布,天猪带你解读新特性
1199 0
MAC使用find命令的正确办法
MAC使用find命令的正确办法
459 0
|
数据采集 Python
Python爬虫:scrapy爬虫设置随机访问时间间隔
Python爬虫:scrapy爬虫设置随机访问时间间隔
1090 0
|
Python
Python 技巧篇-用print打印输出但不换行方法
Python 技巧篇-用print打印输出但不换行方法
3983 0
Python 技巧篇-用print打印输出但不换行方法
|
弹性计算 定位技术 数据中心
阿里云服务器地域节点根据所在地区省市就近原则选择对照表
阿里云ECS云服务器地域节点如何选择?地域是指云服务器数据中心所在位置,距离地域越近网络延迟越小速度越快,云吞铺子认为可以根据用户所在地区就近选择云服务器的地域,可以参考下表: 阿里云地域节点可覆盖地区对照表 阿里云ECS云服务器地域有很多,很多同学不清楚如何选择,地域的选择有多重因素要考虑,云吞.
2097 0
阿里云服务器地域节点根据所在地区省市就近原则选择对照表