ultmaster 男神和小迷妹们玩起了捉迷藏的游戏。

小迷妹们都希望自己被 ultmaster 男神发现,因此她们都把自己位置告诉了 ultmaster 男神,因此 ultmaster 男神知道了自己去找每个小迷妹所要花的时间。

已知发现第 i 小迷妹得到的分数为 ai⋅tr(tr 为游戏剩余时间)。ultmaster 想知道他最多能拿多少分。

Input

第一行两个整数 n,T (1≤n≤105,1≤T≤300) 分别表示小迷妹数量,游戏总时间。

接下去 n 行,每行两个整数 ai,ti (1≤ai≤100,1≤ti≤300) 分别表示发现小迷妹的分数以及 ultmaster 男神发现小迷妹所需时间。

Output

一个整数,表示 ultmaster 在游戏中最多拿多少分。

Examples

input
2 10
2 5
1 6
output
10
input
3 5
5 4
1 1
10 6
output
5

Note

样例一:找到小迷妹一,找到后得分 2×(10−5)=10 分。
样例二:找到小迷妹一,找到后得分 5×(5−4)=5 分,之后再找到小迷妹二得分也是 0,所以最高得分 5 分。

 
(ps:比赛的时候发现这题,像发现了宝藏,不就是简单的背包嘛,然而一直没过,GG;虽然最后还是排名前三,但完全靠运气,因为这次数据出了一些问题,导致很多排序在我前面的都FST到我后面了。我的D题重测后也WA了。)
 
题解说要排序,为什么这里的背包前背包要排序呢:
 
--------------------------------------------分界线---------------------------------------------
 
背包是特殊的DP。 01问题的本质是该物品价值确定,然后决定选还是不选;而EOJ的寻找小迷妹的问题,是因为物品的价值并不明确,我们首先采用了排序的方法,保证了一种使每个物品都能获得的最优的顺序,当然使两个物品之间,这应该是保证了动态规划的最优子结构问题,然后对于这个背包我们又去决定每一个物品放还是不放......就是说我们先搞出一个顺序,使得背包容量能装下所有物品时能获得最大的价值,然后又因为背包空间有限,按照这个顺序来选择这个物品,能比后其他顺序选择这个物品获得价值更大......对于普通背包来说,是因为价值确定了,所以不用排序......

最优子结构解释一下:这里的价值和时间顺序有关,所以我们排序,那么让价值高的先占据背包。然后剩下的空余背包再去DP。

(总之,如果遇到价值和时间无关的,无需多想。有关的,注意一下是否需要排序)。

至于验证,就根据不同的题划不等式就行了。。。

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int dp[],ans;
struct in { int a,t; }s[];
bool cmp(in w,in v){ return w.a*v.t>v.a*w.t;}
int main()
{
int N,T;
scanf("%d%d",&N,&T);
for(int i=;i<=N;i++)
scanf("%d%d",&s[i].a,&s[i].t);
sort(s+,s+N+,cmp);
for(int i=;i<=N;i++){
for(int j=T-s[i].t;j>=;j--) dp[j+s[i].t]=max(dp[j+s[i].t],dp[j]+(T-j-s[i].t)*s[i].a);
for(int j=;j<=T;j++) dp[j]=max(dp[j],dp[j-]);
}
cout<<dp[T]<<endl;
return ;
}

EOJ Monthly 2018.4 (E.小迷妹在哪儿(贪心&排序&背包)的更多相关文章

  1. EOJ Monthly 2018.4

    A. ultmaster 的小迷妹们 Time limit per test: 2.0 seconds Memory limit: 256 megabytes ultmaster 男神和他的小迷妹们准 ...

  2. 【EOJ Monthly 2018.7】【D数蝌蚪】

    https://acm.ecnu.edu.cn/contest/92/problem/D/ D. 数蝌蚪 Time limit per test: 2.0 seconds Memory limit:  ...

  3. EOJ Monthly 2018.8 D. Delivery Service-树上差分(边权/边覆盖)(边权转点权)(模板题)

    D. Delivery Service 单测试点时限: 2.5 秒 内存限制: 512 MB EOJ Delivery Service Company handles a massive amount ...

  4. EOJ Monthly 2018.2

    A. 坑爹的售票机 题意 用\(1,5,10,25,50,100\)的纸币买\(n\)张单价为\(p\)的船票,且一次性最多买\(k\)张,求钱数恰好时最少需要多少张纸币. Hard: \(n,k,p ...

  5. EOJ Monthly 2018.1 F 最小OR路径

    题目链接 Description 给定一个有 \(n\) 个点和 \(m\) 条边的无向图,其中每一条边 \(e_i\) 都有一个权值记为 \(w_i\) . 对于给出的两个点 \(a\) 和 \(b ...

  6. EOJ Monthly 2018.7

    准备继续大学acm啦 又要开始愉快的码码码啦 第一次在华东师大OJ上面做题 看来EOJ上的积分体质是假的,我怎么一把上红??? A.数三角形 神tm的防AK题放在A,出题人很不友好啊... 先写了个暴 ...

  7. [EOJ Monthly 2018.10][C. 痛苦的 01 矩阵]

    题目链接:C. 痛苦的 01 矩阵 题目大意:原题说的很清楚了,不需要简化_(:з」∠)_ 题解:设\(r_i\)为第\(i\)行中0的个数,\(c_j\)为第\(j\)列中0的个数,\(f_{i,j ...

  8. EOJ Monthly 2018.11 D. 猜价格

    猜价格 分两种情况讨论: k≤n,先猜至多 k 次 1,由于回答 <1 肯定是假的,所以可以把剩余系下是哪次错试出来,然后用至多 n 次搞定. k>n,每个数都猜两次,如果两次结果不一样, ...

  9. EOJ Monthly 2018.7 B.锐角三角形(数学几何+思维)

    描述 是否存在面积为S/2的整点锐角三角形?存在输出Yes并输出三个整点坐标,否则输出No. 注意如果存在输出的坐标必须在long long范围内. Input 第一行一个整数S(1<=S< ...

随机推荐

  1. hdu 4885 (n^2*log(n)判断三点共线建图)+最短路

    题意:车从起点出发,每次只能行驶L长度,必需加油到满,每次只能去加油站或目的地方向,路过加油站就必需进去加油,问最小要路过几次加油站. 开始时候直接建图,在范围内就有边1.跑最短了,再读题后发现,若几 ...

  2. web信息搜索之目标扫描篇

    https://blog.csdn.net/dongfei2033/article/details/78175421

  3. 实现TTCP (检测TCP吞吐量)

    实现TTCP (检测TCP吞吐量) 应用层协议 为了解决TCP粘包问题以及客户端阻塞问题 设计的应用层协议如下: //告知要发送的数据包个数和长度 struct SessionMessage { in ...

  4. tar [options] [list of file]

    打包:zcvf 解压:zxvf -c 创建新档案文件 -x 从档案文件中解出文件(释放文件) -v (verbose)显示tar命令执行的详细过程 -f 指定目标为一个文件而不是一个设备 -z 调用g ...

  5. spring boot 文件上传大小配置

    在启动类中,添加bean import javax.servlet.MultipartConfigElement; import org.springframework.boot.SpringAppl ...

  6. Hadoop 学习 HDFS

    1.HDFS的设计 HDFS是什么:HDFS即Hadoop分布式文件系统(Hadoop Distributed Filesystem),以流式数据访问模式来存储超大文件,运行于商用硬件集群上,是管理网 ...

  7. Linux出现cannot create temp file for here-document: No space left on device的问题解决

    在终端输入:cd /ho 按tab键时,显示错误: bash: cannot create temp file for here-document: No space left on device 这 ...

  8. Java之基于Eclipse搭建SSH框架(下)

    在上篇博客里,我简介了Tomcat滴配置与Struts2滴搭建,假设对这个还不会滴童鞋去看一下我滴上篇博客<Java之基于Eclipse搭建SSH框架(上)>.今天我们接着上篇博客滴内容. ...

  9. underscore.js 页面数据渲染

    1.underscore.js  源码 // Underscore.js 1.8.3 // http://underscorejs.org // (c) 2009-2015 Jeremy Ashken ...

  10. C++中的链式操作

    代码编译环境:Windows7 32bits+VS2012. 1.什么是链式操作 链式操作是利用运算符进行的连续运算(操作).它的特点是在一条语句中出现两个或者两个以上相同的操作符,如连续的赋值操作. ...