zoukankan      html  css  js  c++  java
  • 【洛谷4765】[CERC2014] The Imp(贪心+DP)

    点此看题面

    • (n)个物品,第(i)个物品需要(c_i)的花费,具有(v_i)的价值。
    • 恶魔会最小化你的收益,它可以至多(k)次在你买下一个物品后施展法术,施法会使你当前买下的物品失去价值,不施法则你可以获得这个物品的价值并结束购买。
    • 求你能获得的最大收益。
    • (nle1.5 imes10^5,kle9)

    贪心

    假定我们选中了(k)个物品,现在想要判断最优的购买顺序。

    这个问题的实质是要最大化(min{v_i-sum_{j=1}^ic_j})

    而这其实是一个比较经典的贪心问题,肯定优先购买(v_i)小的。

    反向动态规划

    首先我们将所有物品按照(v_i)排个序,那么就是要选出一个子序列来最大化收益。

    如果传统地正向(DP),在维护最大的最小值的时候还要维护之前的花费之和,比较棘手。

    因此我们反向(DP),发现此时变成给后面已经求出的最大的最小值减去当前花费更新答案,而后面的选法对于前面实际上是无影响的。

    于是列出转移方程:

    [f_{i,j}=max{f_{i+1,j},min{v_i,f_{i+1,j-1}}-c_i} ]

    具体实现也可以按(v_i)从大到小排序然后正向(DP)

    代码:(O(nk))

    #include<bits/stdc++.h>
    #define Tp template<typename Ty>
    #define Ts template<typename Ty,typename... Ar>
    #define Reg register
    #define RI Reg int
    #define Con const
    #define CI Con int&
    #define I inline
    #define W while
    #define N 150000
    #define K 9
    #define INF (int)1e9
    using namespace std;
    int n,k,f[N+5][K+1];struct S {int v,c;I bool operator < (Con S& o) Con {return v>o.v;}}s[N+5];
    namespace FastIO
    {
    	#define FS 100000
    	#define tc() (FA==FB&&(FB=(FA=FI)+fread(FI,1,FS,stdin),FA==FB)?EOF:*FA++)
    	char oc,FI[FS],*FA=FI,*FB=FI;
    	Tp I void read(Ty& x) {x=0;W(!isdigit(oc=tc()));W(x=(x<<3)+(x<<1)+(oc&15),isdigit(oc=tc()));}
    }using namespace FastIO;
    int main()
    {
    	RI Tt,i,j;read(Tt);W(Tt--)
    	{
    		for(read(n),read(k),i=1;i<=n;++i) read(s[i].v),read(s[i].c);sort(s+1,s+n+1);//按价值从大到小排序
    		for(i=1;i<=n;++i) for(j=0;j<=k;++j) f[i][j]=max(f[i-1][j],min(s[i].v,j?f[i-1][j-1]:INF)-s[i].c);//动态规划
    		printf("%d
    ",max(f[n][k],0));
    	}return 0;
    }
    
    败得义无反顾,弱得一无是处
  • 相关阅读:
    解决ipad连接不上电脑的问题
    解决ping 127.0.0.1 一般故障 问题
    DeepLearning.ai学习笔记(五)序列模型 -- week1 循环序列模型
    DeepLearning.ai学习笔记(四)卷积神经网络 -- week4 特殊应用:人力脸识别和神经风格转换
    pip安装 exception记录
    Ubuntu ./configure 半途终止 导致没有生成makefile文件 解决方法
    Open Data Structure Templates
    Win7 下安装VirtualBox 没有Ubuntu 64bit 选项问题
    DataStructure 排序 源码实现
    DS实验题 融合软泥怪-2 Heap实现
  • 原文地址:https://www.cnblogs.com/chenxiaoran666/p/Luogu4765.html
Copyright © 2011-2022 走看看