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中学化学竞赛组教练是一个酷爱炉石的人. 他会一边 ...
随机推荐
- Java 搜索引擎
1.Java 全文搜索引擎框架 Lucene 毫无疑问,Lucene是目前最受欢迎的Java全文搜索框架,准确地说,它是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎.Luc ...
- CPU密集型和I/O密集型区别
CPU密集型 一些进程绝大多数时间在计算上,称为计算密集型(CPU密集型)computer-bound.一些大量循环的代码(例如:图片处理.视频编码.人工智能等)就是CPU密集型. I/O密集型 有一 ...
- python---cookie模拟登陆和模拟session原理
cookie模拟登陆: import tornado.web class IndexHandler(tornado.web.RequestHandler): def get(self): #self. ...
- JAVA-大白话探索JVM-运行时内存(三)
前面章节 JAVA-大白话探索JVM-类加载器(一) JAVA-大白话探索JVM-类加载过程(二) JVM运行时内存 通过之前的章节,我们知道.class类如何加载到内存中,如图红框 开始讲讲内存空间 ...
- Tomcat8.5配置https启动报空指针错误
tomcat8.5版本和tomcat8.0有了很大的区别,默认的server.xml中https的配置方式也有了变化: <Connector port="8443" prot ...
- VUE2.0 饿了吗视频学习笔记(七-终):compute,循环,flex,display:table
一.star组件使用到了computed属性 computed相当于属性的一个实时计算,当对象的某个值改变的时候,会进行实时计算. computed: { starType() { return 's ...
- Nginx 防盗链配置
防盗链一般都是流媒体配置 location ~* \.(jpg|jpeg|png|bmg|swf|mp4|mp4|mmf|zip|rar|swf|flv)$ { // 对jpg|jpeg|png|bm ...
- jQuery - 字符串与json对象之间的转换
将字符串转换为json 在js中,我们是这样写的 var _data = eval('(' + data + ')'); 原理:eval() 函数可计算某个字符串,并执行其中的的 JavaScript ...
- windws 下 sublime Text 3 ·安装的安装与激活
下载sublime 我们可以到官网进行下载对应的版本 https://www.sublimetext.com/3 如下是官网的内容(我选择的是Windows 64 bit). Sublime Text ...
- Flex布局和Bootstrap布局两者的比较
在Bootstrap中采用12栅格的布局,12份随意分配,但是不能解决5等分,7等分的问题.所以flex布局来协助. bootstrap的布局方式 <div class="row&qu ...