Luogu P4945 【最后的战役】
本来以为做法一样,就是少带个$log$,结果发现看不懂出题人的题解(我好菜啊)
那就自己写一篇吧
比较简单的$DP$思路
状态定义:
前两个转移很好处理,第三个好像就不好办了
不妨暴力定义进状态里
设$dp[i][j]$表示前$i$秒用了$j$次第三种转移的最大能量和
转移:
三种转移
$(i'<i)$
$1,dp[i][j]=max(dp[i][j],dp[i-1][j]+max\left\{p[i']\right\})$
$2,dp[i][j]=max(dp[i][j],dp[i-1][j]+\sum_{k[i']=k[i]}p[i'])$
$3,dp[i][j]=max(dp[i][j],dp[i-2][j-1]+2*max(max\left\{p[i]\right\},\sum_{k[i']=k[i]}p[i']))$
考虑搞出来这两个东西
$1,max\left\{p[i']\right\}$
前缀最大值即可$O(1)$
$2,\sum_{k[i']=k[i]}p[i']$
我写的离散化然后每次用就是$O(1)$
$map$也可以,但是用$map$的话,切记,对于相同的$i$,上式的值是相同的,不要放到枚举$j$的内层循环了
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=;
int dp[maxn][],n,m,k[maxn],p[maxn],x[maxn],mp[*maxn],maxa,cnt,sum[*maxn];
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
scanf("%d%d",&k[i],&p[i]);
mp[++cnt]=k[i];
}
for(int i=;i<=n;i++)
scanf("%d",&x[i]),mp[++cnt]=x[i];
sort(mp+,mp+cnt+);
cnt=unique(mp+,mp+cnt+)-mp-;
for(int i=;i<=n;i++)
{
k[i]=lower_bound(mp+,mp+cnt+,k[i])-mp;
x[i]=lower_bound(mp+,mp+cnt+,x[i])-mp;
}
for(int i=;i<=n;i++)
{
maxa=max(maxa,p[i]),sum[k[i]]+=p[i];
int tmp=max(maxa,sum[x[i]]);
for(int j=;j<=min(i,m);j++)
{
if(i>&&j)
dp[i][j]=max(dp[i][j],dp[i-][j-]+*tmp);
dp[i][j]=max(dp[i][j],dp[i-][j]+tmp);
}
}
int ans=;
for(int i=;i<=m;i++)
ans=max(ans,dp[n][i]);
printf("%d\n",ans);
return ;
}
Luogu P4945 【最后的战役】的更多相关文章
- Luogu P4398 [JSOI2008]Blue Mary的战役地图 矩阵哈希
其实可以二分矩阵边长但是我太懒了$qwq$. 把每个子矩阵扔到$map$里,然后就没了 #include<cstdio> #include<map> #include<i ...
- Luogu 魔法学院杯-第二弹(萌新的第一法blog)
虽然有点久远 还是放一下吧. 传送门:https://www.luogu.org/contest/show?tid=754 第一题 沉迷游戏,伤感情 #include <queue> ...
- luogu p1268 树的重量——构造,真正考验编程能力
题目链接:http://www.luogu.org/problem/show?pid=1268#sub -------- 这道题费了我不少心思= =其实思路和标称毫无差别,但是由于不习惯ACM风格的题 ...
- [luogu P2170] 选学霸(并查集+dp)
题目传送门:https://www.luogu.org/problem/show?pid=2170 题目描述 老师想从N名学生中选M人当学霸,但有K对人实力相当,如果实力相当的人中,一部分被选上,另一 ...
- [luogu P2647] 最大收益(贪心+dp)
题目传送门:https://www.luogu.org/problem/show?pid=2647 题目描述 现在你面前有n个物品,编号分别为1,2,3,--,n.你可以在这当中任意选择任意多个物品. ...
- bzoj1567: [JSOI2008]Blue Mary的战役地图
将矩阵hash.s[0]忘了弄成0,输出中间过程发现了. hash.sort.判重.大概这样子的步骤吧. #include<cstdio> #include<cstring> ...
- Luogu 考前模拟Round. 1
A.情书 题目:http://www.luogu.org/problem/show?pid=2264 赛中:sb题,直接暴力匹配就行了,注意一下读入和最后一句话的分句 赛后:卧槽 怎么只有40 B.小 ...
- BZOJ 1567: [JSOI2008]Blue Mary的战役地图( 二分答案 + hash )
二分答案, 然后用哈希去判断... ------------------------------------------------------------------------- #include ...
- luogu P2580 于是他错误的点名开始了
luogu P2580 于是他错误的点名开始了 https://www.luogu.org/problem/show?pid=2580 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边 ...
随机推荐
- C#怎么调用百度地图Web API
直接上代码: public ActionResult FindMileage() { string s; HttpWebRequest req = (HttpWebRequest)HttpWebReq ...
- .net视频教程代码之《提交注册内容》
看我的视频之后感觉代码太多不好打或者容易打错的话可以来看我的这里的代码.我的视频地址是 https://www.bilibili.com/video/av12727717/ 类里面的代码: using ...
- 过滤选择器first与子元素过滤选择器first-child的区别
1.表格代码如下: <table id="table"> <tr> <td>id</td> <td>name</t ...
- bootstrap3 input 验证样式【转】
feedback <form role="form"> <div class="form-group has-success has-feedback& ...
- TCP和UDP的区别和优缺点
1.TCP与UDP区别总结: 1.TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接2.TCP提供可靠的服务.也就是说,通过TCP连接传送的数据,无差错,不丢失 ...
- BIO | NIO | AIO (Java版)
几篇解释的不错的文章: BIO NIO AIO NIO.2 入门,第 1 部分: 异步通道 API 使用异步 I/O 大大提高应用程序的性能
- python 的正则表达式指北
正则表达式用来拆分字符串 >>> s = 'one1two2three3four4' >>> pattern = re.compile(r'\d+') >&g ...
- node.js 找不到 xxx 模块解决办法
node.js找不到xxx 这个模块的解决方法. 按顺序来. 1.检查一下是否拼写错误. 2.这个模块是自己写的,是的话.检查一下路径是否正确. 3.如果是导入的模块.用 npm list这个命令输出 ...
- rest framework错误笔记——身份验证和权限
按照官网教程(http://www.django-rest-framework.org/tutorial/4-authentication-and-permissions/)走到最后一步验证时,命令窗 ...
- java程序运存扩容
线上程序随着业务增多,运行的越来越慢,初步判定是因为内存分配的太小导致频繁的进行GC和OOM,于是着手增加内存上限. 增加内存上限都知道是修改java启动的opt,因为服务容器是tomcat 首先是在 ...