题目描述

现在你面前有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,含义如题目所述。

输出格式:

输出仅一行,表示最大的收益。

输入输出样例

输入样例#1:

2
5 2
3 5
输出样例#1:

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 ;
}

最新文章

  1. django搭建论坛之一环境配置
  2. 注册、卸载DLL
  3. 封装application类
  4. 显示pdf
  5. OpenJudge计算概论-能被3,5,7整除的数
  6. delphi中的ClientDataSet组件的open和Execute方法各自在什么情况下用?
  7. Mapreduce读取Hbase表,写数据到一个Hbase表中
  8. CreateWaitableTimer和SetWaitableTimer函数(定时器)
  9. 【木德木作杯楼市达人秀NO.28】南湖买房故事
  10. MyBatis(5):MyBatis集成Spring事务管理(上)
  11. Linux 机器之间建立互信
  12. 将用户信息保存到Cookie中
  13. 在 Centos 安装 MySQL
  14. LOJ2542 PKUWC2018 随机游走 min-max容斥、树上高斯消元、高维前缀和、期望
  15. 【ARTS】01_10_左耳听风-20190114~20190120
  16. 大数据入门到精通5--spark 的 RDD 的 reduce方法使用
  17. centos 监控进程,并自动重启
  18. arduino远程刷新(烧录)固件
  19. 使用插件实现Jenkins参数化构建
  20. 实验四——使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

热门文章

  1. 机器学习(十三)——机器学习中的矩阵方法(3)病态矩阵、协同过滤的ALS算法(1)
  2. 2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告
  3. TI C66x DSP 四种内存保护问题 -之- CPU訪问corePac内部资源时的内存保护问题
  4. openssl之BIO系列之12---文件描写叙述符(fd)类型BIO
  5. Flash文字效果
  6. Android创建和使用数据库
  7. JNI在C和C++中的调用区别
  8. poj1125--Floyd
  9. 左儿子右兄弟Trie UVA 11732 strcmp() Anyone?
  10. Topcoder SRM 638 DIV 2 (大力出奇迹)