zoukankan      html  css  js  c++  java
  • [题解]DP-HDU3466

    原题链

    题目大意

    其实就是一个有限制的(01)背包,考虑两个物品a,b.如果两个物品都可以买,但是先买了a就不能买b,但先买b还可以买a,那么很明显买先b更优,所以这就涉及到要进行排序再加01背包,将(a,b)买的先后关系表示出来就是程序里的cmp函数

    代码

    #include <bits/stdc++.h>
    using namespace std;
    struct node{
    	int p,q,v;
    }t[100010];
    int f[100010];
    bool cmp(node x,node y){
    	return x.q - x.p < y.q - y.p;
    }
    int main(){
    	//freopen("a.in","r",stdin);
    	int n,m;
    	while(scanf("%d%d",&n,&m) != EOF){
    		for(int i = 1;i <= n;i++){
    			scanf("%d%d%d",&t[i].p,&t[i].q,&t[i].v);
    		}
    		sort(t + 1,t + n + 1,cmp);
    		int ans = 0;
    		memset(f,0,sizeof(f));//有多组数据,记得清零
    		for(int i = 1;i <= n;i++){
    			for(int j = m;j >= max(t[i].p,t[i].q);j--)
    				f[j] = max(f[j],f[j - t[i].p] + t[i].v);
    		}
    		printf("%d
    ",f[m]);
    	}
    	return 0;
    }
    
  • 相关阅读:
    rsync
    typora 页内跳转
    shell脚本搭建redis集群
    Html
    python json模块
    Appium
    selenium+python
    jmeter+ant+jenkins接口自动化测试框架
    测试小结
    面向对向
  • 原文地址:https://www.cnblogs.com/czy--blog/p/13947246.html
Copyright © 2011-2022 走看看