zoukankan      html  css  js  c++  java
  • [luogu1156]垃圾陷阱_动态规划_背包dp

    垃圾陷阱 luogu-1156

        题目大意:Holsteins在距离地面D英尺的地方,FJ间隔时间ti会往下扔第i个垃圾。Holsteins对待每一个垃圾都会选择吃掉或者垫高。Holsteins有10个点儿的生命值,每个垃圾会给她提供f的生命值。每小时Holsteins会消耗一定的生命值。问:Holsteins最早可以什么时候爬出;否则输出Holsteins可以存活多长时间。

        注释:$2le Dle 100$,$0 < t le 1000$,$1le h le 25$,$1le f le 30$。

          想法:背包dp,和普通的背包不同的是如果这个物品不选,那么它会对Holsteins的生命值产生影响,稍微判断即可。

        最后,附上丑陋的代码... ...

    // luogu-judger-enable-o2
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #define N 110 
    using namespace std;
    struct Node
    {
    	int t,h,l;
    }f[N];
    int n,m;
    int ti[N];
    int dp[N];
    inline bool cmp(Node a,Node b)
    {
    	return a.t<b.t;
    }
    int main()
    {
    	scanf("%d%d",&n,&m);
    	for(int i=1;i<=m;i++)
    	{
    		scanf("%d%d%d",&f[i].t,&f[i].l,&f[i].h);
    	}
    	sort(f+1,f+m+1,cmp);
    	dp[0]=10;
    	for(int i=1;i<=m;i++)
    	{
    		for(int j=n;j>=0;j--)
    		{
    			if(dp[j]>=f[i].t)
    			{
    				if(j+f[i].h>=n)
    				{
    					cout<<f[i].t;
    					return 0;
    				}
    				dp[j+f[i].h]=max(dp[j+f[i].h],dp[j]);
    				dp[j]+=f[i].l;
    			}
    		}
    	}
    	printf("%d
    ",dp[0]);
    	return 0;
    }
    

        小结:无。

  • 相关阅读:
    unordered_set
    树的所有实现
    各类算法模板
    单链表全部实现(绝对史上最完整 附例题)
    求最长回文子串
    无重复的最长子串
    秋叶集
    1451. 重新排列句子中的单词
    152. 乘积最大子数组
    JVM总结的部分内容
  • 原文地址:https://www.cnblogs.com/ShuraK/p/9022866.html
Copyright © 2011-2022 走看看