P4945-最后的战役【dp,离散化】
正题
题目大意:https://www.luogu.org/problemnew/show/P4945
题目大意
第isi\ si s可以
- 获取1∼i1\sim i1∼i中最大的能量
- 获取1∼i1\sim i1∼i中类型为xix_ixi的能量
- 下一秒能量加倍(只能使用mmm次,不可以连续使用)
求最大获取能量
解题思路
考虑dpdpdp,定义fi,j,kf_{i,j,k}fi,j,k表示第isi\ si s和使用了jjj次加倍,这次是否使用加倍
首先我们如果获取能量肯定是选择111和222操作中最多的那个,
定义w=max{max{pj}(j≤i),∑j=1ipj∗(kj==xi)}w=max\{max\{p_j\}(j\leq i),\sum_{j=1}^ip_j*(k_j==x_i)\}w=max{max{pj}(j≤i),j=1∑ipj∗(kj==xi)}
第一个好求,第二个我们可以用离散化
然后开始dpdpdp,如果这次使用魔法
fi,j,1=fi−1,j−1,0f_{i,j,1}=f_{i-1,j-1,0}fi,j,1=fi−1,j−1,0
然后如果获取能量
fi,j,0=max{fi−1,j,0+w,fi−1,j,1+2∗w}f_{i,j,0}=max\{f_{i-1,j,0}+w,f_{i-1,j,1}+2*w\}fi,j,0=max{fi−1,j,0+w,fi−1,j,1+2∗w}
时间复杂度:O(2nm)O(2nm)O(2nm)
codecodecode
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=5e4+10,M=510;
int n,m,k[N],p[N],x[N],len;
int ans,b[N],w[N],f[N][M][2],maxs;
int main()
{//f[i][j][0/1]表示第i秒,还剩下j个加倍,上一秒是否使用了魔法scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%d%d",&k[i],&p[i]);b[i]=k[i];} sort(b+1,b+1+n);len=unique(b+1,b+1+n)-b-1;for(int i=1;i<=n;i++){scanf("%d",&x[i]);int check=x[i];x[i]=lower_bound(b+1,b+1+len,x[i])-b;if(check!=b[x[i]]) x[i]=0;k[i]=lower_bound(b+1,b+1+len,k[i])-b;}memset(f,0xcf,sizeof(f));f[0][0][0]=0; for(int i=1;i<=n;i++){maxs=max(maxs,p[i]);w[k[i]]+=p[i];int z=max(maxs,w[x[i]]);for(int j=0;j<=m;j++){if(j!=0) f[i][j][1]=f[i-1][j-1][0];f[i][j][0]=max(f[i-1][j][0]+z,f[i-1][j][1]+2*z);if(i==n)ans=max(ans,max(f[i][j][1],f[i][j][0]));}}printf("%d",ans);
}
P4945-最后的战役【dp,离散化】相关推荐
- 过河(dp+离散化)
过河 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点 ...
- HDU 6447 YJJ's Salesman(树状数组优化DP + 离散化)
HDU 6447 YJJ's Salesman 题目 给一个二维数组,从(0,0)走到(1e9, 1e9).每次只能走右,下,右下,三个方向.其中只有通过右下走到特定给出的点(村庄)时才会获得分值.问 ...
- poj3666(基础dp+离散化)
题目链接:http://poj.org/problem?id=3666 Making the Grade Time Limit: 1000MS Memory Limit: 65536K Total ...
- *POJ3666.Making the Grade(DP+离散化)
题目链接:http://poj.org/problem?id=3666 题意:求将一个序列调整成纯单调(可以相等)的序列所需要的最小代价 解题思路: 分两种情况讨论: ①不减序列:dp[i][j]表示 ...
- poj3666(DP+离散化)
题目链接:http://poj.org/problem?id=3666 思路: 看了讨论区说本题的数据比较弱,只需要考虑不减序列即可,比较懒,所以我也只写了这一部分的代码,思路都一样,能AC就行了. ...
- P2101-命运石之门的选择【dp,离散化】
前言 我切掉这道题是命运石之门的选择 正题 题目链接:https://www.luogu.org/problemnew/show/P2101 题目大意 nnn个连在一起的高度hih_ihi盒子.一个 ...
- kuangbin专题十二 基础DP
kuangbin专题十二 基础DP A - HDU1024 Max Sum Plus Plus B - HDU1029 Ignatius and the Princess IV C - HDU1069 ...
- poj 3378 Crazy Thairs
题意/Description: These days, Sempr is crazed on one problem named Crazy Thair. Given N (1 ≤ N ≤ 5 ...
- hdu-4028 The time of a day
/**题意:给你1~n个数,问你它的子集内有多少集合的Lcm(最小公倍数)大于等于m的:题解:DP离散化,用map映射一下,map<LL,LL>dp[i].表示i个数,可以有it-> ...
最新文章
- python和c先学哪个对于初中生来说-初中生想学编程,请问先学C语言好还是先学Python?...
- mysql 临时文件目录_MySQL数据库的临时文件究竟储存在哪里
- plsql如何显示表结构图_【论文攻略】排版技巧——如何用 Word 编辑参考文献
- anaconda 包区别 版本_我是如何用Anaconda来管理Python的
- php方法 隐藏手机号中间四位
- 五道口男子计算机职业技术学院,哈哈!双鸭山大学、五道口男子职业技术学校…盘点高校那些“天雷滚滚”的绰号...
- cer证书生成以及签名验签详细篇(keytool 命令)
- 首次适应算法 动态分区分配方式的模拟 C语言——课程设计实习
- 算法基础—数据结构—双链表
- 苹果手机怎么截图,小白点截图方法
- F1-score值计算
- 项目经理修炼手册 2.1.1 程序员的基本功
- T3054 高精度练习-文件操作 codevs
- 打印机清零操作步骤分享!
- Jackson反序列化List
- GEE:指数计算(NDVI、NBR、EVI、NDMI、NDSI、TC、NDFI、EBBI、VCI、BSI、NDBI)
- 基于 Google Tesseract-OCR 文字识别 仿小猿搜题、作业帮
- win10 家庭版 多语言包 安装
- python查看图片颜色统计_Python通过PIL获取图片主要颜色并和颜色库进行对比的方法...
- 能修复受损 DNA的长寿基因?长寿的基因秘密
热门文章
- php 重定向数据不丢失,PHP重定向如何实现数据不丢失?
- java gzip 解压文件_Java实现文件压缩与解压[zip格式,gzip格式]
- ffmpeg库编译加文字_1.编译ffmpeg库
- 101. 对称二叉树023(BFS)
- [JavaWeb-JavaScript]JavaScript_Function函数(方法)对象
- [PAT乙级]1022 D进制的A+B
- LeetCode 110平衡二叉树-简单
- [蓝桥杯2016决赛]一步之遥-枚举
- fusionsphere读音_hydroxyapatite
- 数据结构---邻接矩阵的BFS