P2647 最大收益
题目描述
现在你面前有n个物品,编号分别为1,2,3,……,n。你可以在这当中任意选择任意多个物品。其中第i个物品有两个属性Wi和Ri,当你选择了第i个物品后,你就可以获得Wi的收益;但是,你选择该物品以后选择的所有物品的收益都会减少Ri。现在请你求出,该选择哪些物品,并且该以什么样的顺序选取这些物品,才能使得自己获得的收益最大。
注意,收益的减少是会叠加的。比如,你选择了第i个物品,那么你就会获得了Wi的收益;然后你又选择了第j个物品,你又获得了Wj-Ri收益;之后你又选择了第k个物品,你又获得了Wk-Ri-Rj的收益;那么你获得的收益总和为Wi+(Wj-Ri)+(Wk-Ri-Rj)。
输入输出格式
输入格式:
第一行一个正整数n,表示物品的个数。
接下来第2行到第n+1行,每行两个正整数Wi和Ri,含义如题目所述。
输出格式:
输出仅一行,表示最大的收益。
输入输出样例
2
5 2
3 5
6
说明
20%的数据满足:n<=5,0<=Wi,Ri<=1000。
50%的数据满足:n<=15,0<=Wi,Ri<=1000。
100%的数据满足:n<=3000,0<=Wi,Ri<=200000。
样例解释:我们可以选择1号物品,获得了5点收益;之后我们再选择2号物品,获得3-2=1点收益。最后总的收益值为5+1=6。
题解:
贪心+dp
dfs10分 忘记全排列。
我们可知 如果固定选k个物品的话,一定不能先选r大的。如果先选,这个r将减少多个物品的价值。
首先将r从大到小排序,如果选择这个物品,那么这个物品使它被选之前的所有物品价值-r。
转移方程很好想,选这个物品和不选这个物品两个状态中选取一个最大的。
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,ans,f[][];
struct E{
int w,r;
bool operator < (const E &a)const{return r>a.r;}
}s[];
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d%d",&s[i].w,&s[i].r);
sort(s+,s+n+);
for(int i=;i<=n;i++)
for(int j=;j<=i;j++)
f[i][j]=max(f[i-][j],f[i-][j-]+s[i].w-s[i].r*(j-));
for(int i=;i<=n;i++)ans=max(ans,f[n][i]);
cout<<ans<<endl;
return ;
}
P2647 最大收益的更多相关文章
- 洛谷P2647 最大收益
P2647 最大收益 题目描述 现在你面前有n个物品,编号分别为1,2,3,……,n.你可以在这当中任意选择任意多个物品.其中第i个物品有两个属性Wi和Ri,当你选择了第i个物品后,你就可以获得Wi的 ...
- [luogu P2647] 最大收益(贪心+dp)
题目传送门:https://www.luogu.org/problem/show?pid=2647 题目描述 现在你面前有n个物品,编号分别为1,2,3,--,n.你可以在这当中任意选择任意多个物品. ...
- 洛谷 P2647 最大收益
我是题面 恩,贪心,鉴定完毕. 一个物品是否放进来,取决于它是否能对答案做出贡献. 那物品i的贡献就是\(w[i]-r[i]\) 可是收益的减少是会叠加的 那就是\(w[i]-j*r[i]\),j表示 ...
- 洛谷—— P2647 最大收益
https://www.luogu.org/problem/show?pid=2647 题目描述 现在你面前有n个物品,编号分别为1,2,3,……,n.你可以在这当中任意选择任意多个物品.其中第i个物 ...
- 洛谷 P2647 最大收益 题解
题面 对于“n个物品选任意个”我们就可以想到一种递推方法,即设f[i][j]表示前i个物品选j个的最大收益 我们发现正着转移并不好转移,我们可以倒着转移,使选择的当前第i号物品为第一个物品,这样的话我 ...
- P2647 最大收益 (动态规划)
题目链接 Solution 乍一看发现正着 DP,有明显的后效性,所以就反过来做. 但是同时发现很显然减去多的放后面明显更优,所以按 \(R\) 从大排序. 然后 \(f[i][j]\) 代表前 \( ...
- NOIP模拟6
期望得分:100+100+100=300 实际得分:0+100+90=190 T1 superman 二分给每条边加多少,判断是否存在负环 #include<queue> #include ...
- 【洛谷P2647】最大收益
题目大意 现在你面前有n个物品,编号分别为1,2,3,--,n.你可以在这当中任意选择任意多个物品.其中第i个物品有两个属性Wi和Ri,当你选择了第i个物品后,你就可以获得Wi的收益:但是,你选择该物 ...
- iOS绘制收益柱状图
项目需求,参考了其他绘图demo,自己绘制出来了,不过代码改得有点乱,添加了很多变量,时间关系没用太合适的命名,逻辑处理也没进行优化. 看看效果图(虚线区域都是画的,其他区域添加的都是控件),附上源码 ...
随机推荐
- [反汇编练习] 160个CrackMe之035
[反汇编练习] 160个CrackMe之035. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...
- Keras 最新《面向小数据集构建图像分类模型》
本文地址:http://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html ...
- Java多线程之~~~ReadWriteLock 读写分离的多线程实现
在多线程开发中,常常会出现一种情况,我们希望读写分离. 就是对于读取这个动作来说,能够同一时候有多个线程同 时去读取这个资源,可是对于写这个动作来说,仅仅能同一时候有一个线程来操作.并且同一时候,当有 ...
- vForum 2014点滴随笔
vForum2014 的口号:NO Limits 纵横无限 一条好消息:VMware 将在中国建立亚洲研究院,并在5年内投资10亿美元. VMware宋先生的演讲再次印证了Redhat会议上的趋势: ...
- python(12)- 文件处理应用Ⅰ
一.读取文件,打印第三行时后面加入“徐亚平” 程序如下: count=0 with open("test",mode="r",encoding="ut ...
- mysql 查看当前连接数
http://www.cnblogs.com/pcdelphi/archive/2009/10/31/2017990.html 实战经验: >登录到mysql数据库的终端 >show ...
- Mysql导出大量数据
outfile 导出文件 select name from t1 into outfile "/tmp/test.txt" infile 导入文件 导入到表t1中的name ...
- POJ1830开关问题——gauss消元
题目链接 分析: 第一个高斯消元题目,操作是异或.奇偶能够用0.1来表示,也就表示成bool类型的方程,操作是异或.和加法没有差别 题目中有两个未知量:每一个开关被按下的次数(0.1).每一个开关的转 ...
- 科学计算 | Matlab 使用 GPU 并行计算
科学计算 | Matlab 使用 GPU 并行计算 本文转载自: https://sanwen8.cn/p/14bJc10.html Matlab下直接使用GPU并行计算(预告)< ...
- UIBezierPath(转)
@import url(/css/cuteeditor.css); @import url(/css/cuteeditor.css); @import url(http://i.cnblogs.com ...