【区间DP】【lgP3146】248
传送门
Description
给定一个1*n的地图,在里面玩2048,每次可以合并相邻两个(数值范围1-40),问最大能合出多少。注意合并后的数值并非加倍而是+1,例如2与2合并后的数值为3。
Input
输入的第一行是一个数字n,代表地图大小。然后n行,i+1行代表第i个数的大小
Output
输出仅一行,为最大能合并出的大小
Hint
1<=n<=248,不保证所有的数字能被合成完
Sample Input
Sample Output
solution
典型的区间DP。首先考虑区间dp最普通状态定义:用f[i][j]表示区间[i,j]所能合成的最大答案,转移为f[i][j]=max{f[i][k]+1|当且仅当f[i][k]==f[k+1][j]}。输出f[1][n],这么做本题存在缺陷:在转移时,无法保证区间f[i][j]的最大值在所需要的左(右)端点处被取到。例如:观察线段
此时f[1][3]=5,f[4][6]=5,但是无法进行合并,因为[1,3]等于5的位置在左侧,与[4,6]并不直接相连。
考虑增加维度,当前转移为n^3,增加维度时间爆炸,否定
考虑限制状态,记f[i][j]为区间[i,j]恰好能够合成的最大值,每次转移维护ans。转移同上。可行
对于区间[i,j]的最大值一定可以由其两个子区间的最优解转移得到。
证明:手推可能hack的情况,发现显然。
Code
#include<cstdio>
#define maxn 250 inline void qr(int &x) {
char ch=getchar();int f=;
while(ch>''||ch<'') {
if(ch=='-') f=-;
ch=getchar();
}
while(ch>=''&&ch<='') x=(x<<)+(x<<)+(ch^),ch=getchar();
x*=f;
return;
} inline int max(int a,int b) {return a>b?a:b;}
inline int min(int a,int b) {return a<b?a:b;} inline void swap(int &a,int &b) {
int c=a;a=b;b=c;return;
} int n,num[maxn],frog[maxn][maxn],ans; int main() {
qr(n);
for(int i=;i<=n;++i) {
qr(num[i]);frog[i][i]=num[i];
}
for(int i=;i<n;++i) {
for(int j=;j<=n;++j) {
int r=j+i;if(r>n) break;
for(int k=j;k<r;++k) {
if(!(frog[j][k]^frog[k+][r])) frog[j][r]=max(frog[j][r],frog[j][k]+),ans=max(ans,frog[j][r]);
}
}
}
printf("%d\n",ans);
return ;
}
summary
对于DP时发现状态不够严谨导致转移困难,可以考虑对状态加以限制。在每次转移时更新答案。
另外据说这题有大常数O(n)算法。可惜我不会
End on 2018/6/3
【区间DP】【lgP3146】248的更多相关文章
- 又一道区间DP的题 -- P3146 [USACO16OPEN]248
https://www.luogu.org/problemnew/show/P3146 一道区间dp的题,以区间长度为阶段; 但由于要处理相邻的问题,就变得有点麻烦; 最开始想了一个我知道有漏洞的方程 ...
- 【bzoj4580】[Usaco2016 Open]248 区间dp
题目描述 Bessie likes downloading games to play on her cell phone, even though she does find the small t ...
- 「USACO16OPEN」「LuoguP3146」248(区间dp
题目描述 Bessie likes downloading games to play on her cell phone, even though she doesfind the small to ...
- 「区间DP」「洛谷PP3146 」[USACO16OPEN]248 G
[USACO16OPEN]248 G 题目: 题目描述 Bessie likes downloading games to play on her cell phone, even though sh ...
- 一道另类的区间dp题 -- P3147 [USACO16OPEN]262144
https://www.luogu.org/problemnew/show/P3147 此题与上一题完全一样,唯一不一样的就是数据范围; 上一题是248,而这一题是262144; 普通的区间dp表示状 ...
- 「USACO16OPEN」「LuoguP3147」262144(区间dp
P3147 [USACO16OPEN]262144 题目描述 Bessie likes downloading games to play on her cell phone, even though ...
- 【BZOJ-4380】Myjnie 区间DP
4380: [POI2015]Myjnie Time Limit: 40 Sec Memory Limit: 256 MBSec Special JudgeSubmit: 162 Solved: ...
- 【POJ-1390】Blocks 区间DP
Blocks Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 5252 Accepted: 2165 Descriptio ...
- 区间DP LightOJ 1422 Halloween Costumes
http://lightoj.com/volume_showproblem.php?problem=1422 做的第一道区间DP的题目,试水. 参考解题报告: http://www.cnblogs.c ...
随机推荐
- Python 作用域和命名空间
在介绍类之前,我首先要告诉你一些Python的作用域规则.类定义对命名空间有一些巧妙的技巧,你需要知道作用域和命名空间如何工作才能完全理解正在发生的事情.顺便说一下,关于这个主题的知识对任何高级Pyt ...
- 关于java获取网页内容
最近项目需求,做一些新闻站点的爬取工作.1.简单的jsoup爬取,静态页面形式: String url="a.atimo.cn";//静态页面链接地址Document doc = ...
- 机器学习介绍(introduction)-读书笔记-
一,什么是机器学习 第一个机器学习的定义来自于 Arthur Samuel.他定义机器学习为,在进行特定编程的情况下,给予计算机学习能力的领域.Samuel 的定义可以回溯到 50 年代,他编写了一个 ...
- OpenMPI源码剖析3:try_kill_peers 和 ompi_rte_abort 函数
接着上一篇的疑问,我们说道,会执行 try_kill_peers 函数,它的函数定义在 ompi_mpi_abort.c 下: // 这里注释也说到了,主要是杀死在同一个communicator的进程 ...
- Machine Learning笔记整理 ------ (二)训练集与测试集的划分
在实际应用中,一般会选择将数据集划分为训练集(training set).验证集(validation set)和测试集(testing set).其中,训练集用于训练模型,验证集用于调参.算法选择等 ...
- 一:HDFS 用户指导
1.hdfs的牛逼特性 Hadoop, including HDFS, is well suited for distributed storage and distributed processin ...
- 【转】Keepalived+Tengine实现高可用集群
原文出处:http://502245466.blog.51cto.com/7559397/1301772 概述 近年来随着Nginx在国内的发展潮流,越来越多的互联网公司使用Nginx:凭Nginx的 ...
- hosts_allow配置了却不生效
hosts_allow配置了却不生效 配置了两台白名单的机器,一台生效一台不生效,google后的结果都是更新libwrap.so 安装openssh等等..(问题还是没有解决) 经过对比发现,原来 ...
- C++与C#数据类型对应关系总结
https://blog.csdn.net/u010159842/article/details/51720458 添加: 1.c++参数含有&,c#也需要用ref关键字. 2.在c++中声明 ...
- Serialable与Parcelable
Serializable和Parcelable比较 Serializable的作用是为了保存对象的属性到本地文件.数据库.网络流.rmi以方便数据传输,当然这种传输可以是程序内的也可以是 ...