原文链接https://www.cnblogs.com/zhouzhendong/p/SRM502-500.html

SRM502 Div1 500

好题。

首先,如果已经确定了解决所有问题的优先级,只需要对于每一个问题是否被解决做出决策,那么显然直接 01 背包就好了。

事实上,我们是可以贪心地确定两个问题的优先程度的。

对于两个问题,假设分别为 a 和 b,则先做 a 再紧接着做 b 和先做 b 再紧接着做 a 的收益之差为

\[\begin{eqnarray*}
&&(-dec_a\times req_a-dec_b\times (req_a+req_b))-(-dec_b\times req_b-dec_a\times (req_a+req_b))\\
&=&dec_areq_b-dec_breq_a
\end{eqnarray*}
\]

先做 a 再紧接着做 b 优于 先做 b 再紧接着做 a ,那么

\[dec_areq_b>dec_breq_a\\
\Longrightarrow \frac{dec_a}{req_a}>\frac{dec_b}{req_b}
\]

如果我们称在一种方案中,a 先于 b 做,但不满足上式时,ab 为一对逆序对,那么:

不失一般性,对于某一种方案的任何相邻的逆序对都执行交换操作后,这种方案中依次进行的决策的相邻元素都满足上式,等价于按照上式所述的特殊值排序。

于是我们就确定了所有问题的优先级,再套个 01 背包即可解决这个问题。

static const int N=55,TT=100005*2;
static const LL INF=1LL<<56;
int n;
LL dp[TT];
int find(int T, vector <int> a, vector <int> d, vector <int> r){
n=a.size();
for (int i=0;i<n;i++)
for (int j=i+1;j<n;j++)
if (1LL*r[j]*d[i]<1LL*r[i]*d[j]){
swap(a[i],a[j]);
swap(d[i],d[j]);
swap(r[i],r[j]);
}
for (int i=0;i<TT;i++)
dp[i]=-INF;
dp[0]=0;
for (int i=0;i<n;i++)
for (int j=T-1;j>=0;j--)
dp[j+r[i]]=max(dp[j+r[i]],dp[j]+a[i]-1LL*d[i]*(j+r[i]));
LL ans=-INF;
for (int i=0;i<=T;i++)
ans=max(ans,dp[i]);
return ans;
}

TopCoder SRM502 Div1 500 贪心 01背包的更多相关文章

  1. HDU 3466 Proud Merchants【贪心 + 01背包】

    Recently, iSea went to an ancient country. For such a long time, it was the most wealthy and powerfu ...

  2. Codeforces1203F2. Complete the Projects (hard version) (贪心+贪心+01背包)

    题目链接:传送门 思路: 对于对rating有提升的项目,肯定做越多越好,所以把$b_{i} >= 0$的项目按rating要求从小到大贪心地都做掉,得到最高的rating记为r. 对于剩余的$ ...

  3. TopCoder SRM500 Div1 500 分治

    原文链接https://www.cnblogs.com/zhouzhendong/p/SRM500-500.html SRM500 Div1 500 没想到 double 的精度居然没有爆-- 考虑以 ...

  4. TopCoder SRM502 Div1 1000 动态规划

    原文链接https://www.cnblogs.com/zhouzhendong/p/SRM502-1000.html SRM502 Div1 1000 题意 从 [0,n-1] 中选择 k 个不同的 ...

  5. 2018.09.22 ZJOI2005午餐(贪心+01背包)

    描述 上午的训练结束了,THU ACM小组集体去吃午餐,他们一行N人来到了著名的十食堂.这里有两个打饭的窗口,每个窗口同一时刻只能给一个人打饭.由于每个人的口味(以及胃口)不同,所以他们要吃的菜各有不 ...

  6. [HDOJ3466]Proud Merchants(贪心+01背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3466 n个商人,每个商人有一个物品,物品有价格p.价值v还有一个交易限制q.q的意义是假如你现在拥有的 ...

  7. hdu 5501 The Highest Mark(贪心+01背包)

    题意:类似cf的赛制,每道题目有A,B,C三个值,A表示初始分数,B表示每分钟题的分数会减少B,C表示做这道题需要C分钟,数据保证分数不会变为负数.现在给出比赛时长,问安排做题的顺序,求最大得分. 思 ...

  8. HDU 2546 饭卡【贪心+01背包】

    饭卡 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  9. D - Digging(01背包,贪心)

    D - Digging Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Submit St ...

随机推荐

  1. Ubuntu选择软件源

    1. 系统桌面右上角,系统菜单中选择Software Up to Date 2. 点击Settings-按钮 3. Ubuntu Software标签页,Download from选择中国的软件服务器 ...

  2. ubuntu18.04安装xmind8

    1.先去官网下载:https://www.xmind.net/download/xmind8/ 2.默认下载到/home/guojihai/下载/目录下然后把xmind-8-update8-linux ...

  3. linux杀死僵尸进程

    用下面的命令找出僵死进程 ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]' 命令注解: -A 参数列出所有进程 -o 自定义输出字段 我们设定显示字段为 sta ...

  4. css中input框不可点击+首行缩进

    Css 1)text-indent::首行缩进 2)disabled="true"设置input框不可以点击 3)Css:xx!important:声明提前优先级最高..!impo ...

  5. JS跨域ajax访问

    方式1:jsonp解决跨域访问 需要服务和js配合 服务 [WebMethod] public void HelloWorld2(string name) { HttpContext.Current. ...

  6. Ftp上传的方法

    using System;using System.Collections.Generic;using System.IO;using System.Net;using System.Text; na ...

  7. Confluence 6 MySQL 问题解决

    如果 Confluence 提示没有 class 文件,你可能将你的 JDBC 驱动放置到了错误的文件夹. 如果你收到了下面的错误信息,请确认 confluenceuser 用户已经具有了所有需求的数 ...

  8. Confluence 6 Oracle 驱动输入你的数据库细节

    Confluence 的安装向导将会指导你一步一步的在 Confluence 中配置安装 Oracle 数据库. 使用 JDBC 连接(默认) JDBC 是推荐的连接你的 Confluence 到数据 ...

  9. Confluence 6 升级你的许可证

    如果你修改了你的许可证(例如为你的许可证增加了更多的用户),或者从 Cloud 中整合到你本地,你需要更新你的许可证. 希望更新你的额许可证: 进入  > 基本配置(General Config ...

  10. dell g3:安装ubuntu16.04 + CUDA8.0

    一.Ubuntu 1.选择UEFI模式启动,参考https://blog.csdn.net/qq_34570910/article/details/78084659 2.卡在logo界面进不去,在qu ...