ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【洛谷4765】[CERC2014] The Imp(贪心+DP)

2021-07-08 20:01:20  阅读:215  来源: 互联网

标签:洛谷 FA int Imp FB CERC2014 物品 FI define


点此看题面

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

贪心

假定我们选中了\(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\n",max(f[n][k],0));
	}return 0;
}

标签:洛谷,FA,int,Imp,FB,CERC2014,物品,FI,define
来源: https://www.cnblogs.com/chenxiaoran666/p/Luogu4765.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有