【题解】poj1738石子合并 区间DP 加西亚瓦克斯算法
题目链接
乍一看很激动(诶辣鸡题才做过)然后n=4e4+o(n^3)=GG
GarsiaWachs算法
或者四边形优化(还是GG不用搞了)(以后自己写一遍)
还可以加上个平衡树(憋说了……)
step 0:初始数组为num[1..n],num[0] = num[n+1] = INF
step 1:每次找到一个最小的i使得num[i-1]<=num[i+1],将num[i-1]和num[i]合并为temp
step 2:找到前面一个最大的j使得num[j]>temp,将temp放在j之后。
step 3:重复1,2,直到剩余的堆数为1。
因为每次step2之后,指向的位置只需要向前一个即可(前面其他的都不会受到此次更新的影响),因此每次指针的移动并不多。也因此,一个理论复杂度其实有O(N^2)的算法能够轻松过掉这道题。
//GarsiaWachs
/*设序列是stone[],从左往右,找一个满足stone[k-1] <= stone[k+1]的k,
找到后合并stone[k]和stone[k-1],再从当前位置开始向左找最大的j,
使其满足stone[j] > stone[k]+stone[k-1],插到j的后面就行。
一直重复,直到只剩下一堆石子就可以了。
在这个过程中,可以假设stone[-1]和stone[n]是正无穷的。*/
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int N=5e4+5;
int n,t,ans,stone[N];
void combine(int k)
{int tmp=stone[k]+stone[k-1];//合并 ans+=tmp;for(int i=k;i<t-1;i++)stone[i]=stone[i+1];//左移 t--;int j=0;for(j=k-1;j>0&&stone[j-1]<tmp;j--)stone[j]=stone[j-1];stone[j]=tmp;//插入到j后面 while(j>=2&&stone[j]>=stone[j-2]){int d=t-j;combine(j-1);j=t-d;}
}
int main()
{//freopen("in.txt","r",stdin);while(scanf("%d",&n)!=EOF&&n){for(int i=0;i<n;i++)scanf("%d",stone+i);t=1;ans=0;for(int i=1;i<n;i++){stone[t++]=stone[i];while(t>=3&&stone[t-3]<=stone[t-1])combine(t-2);}while(t>1)combine(t-1);printf("%d\n",ans);}return 0;
}
【题解】poj1738石子合并 区间DP 加西亚瓦克斯算法相关推荐
- AcWing.282石子合并(区间DP)题解
石子合并 题目描述 设有N堆石子排成一排,其编号为1,2,3,-,N. 每堆石子有一定的质量,可以用一个整数来描述,现在要将这N堆石子合并成为一堆. 每次只能合并相邻的两堆,合并的代价为这两堆石子的质 ...
- [蓝桥杯][算法提高VIP]合并石子(区间dp+平行四边形优化)
题目描述 在一条直线上有n堆石子,每堆有一定的数量,每次可以将两堆相邻的石子合并,合并后放在两堆的中间位置,合并的费用为两堆石子的总数.求把所有石子合并成一堆的最小花费. 输入 输入第一行包含一个整数 ...
- 【BZOJ 4565】 [Haoi2016]字符合并 区间dp+状压
考试的时候由于总是搞这道题导致爆零~~~~~(神™倒序难度.....) 考试的时候想着想着想用状压,但是觉得不行又想用区间dp,然而正解是状压着搞区间,这充分说明了一件事,状压不是只是一种dp而是一种 ...
- 【数据结构与算法】之深入解析“合并区间”的求解思路与算法示例
一.题目要求 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] .请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数 ...
- 上元节的灯会(灭)-区间dp
题目背景 上元节的庙会上,牛宝靠自己的聪明才智成功破解了花灯阵,点亮了在场所有花灯,但他没料到的是这个游戏包含AB两个项目,A项目就是点亮所有花灯,而B项目则是熄灭所有花灯.不过点亮的是花灯阵,熄灭的 ...
- 区间dp入门——总结+习题+解析
前天学长拉了个区间dp的专题,花了两个做,今天就来做个总结吧!!! 区间dp其实就是一种建立在线性结构上的对区间的动态规划,dp本来就是很奇妙的东西,也没有什么套路,就是一种思考的数学思维方式,只有做 ...
- HDU 5115 (杀狼,区间DP)
题意:你是一个战士现在面对,一群狼,每只狼都有一定的主动攻击力和附带攻击力.你杀死一只狼.你会受到这只狼的(主动攻击力+旁边两只狼的附带攻击力)这么多伤害~现在问你如何选择杀狼的顺序使的杀完所有狼时, ...
- luogu P1880 [NOI1995]石子合并
咕咕咕 说好把济南集训时做的题写写题解还是鸽了然后因为太无聊又来续上了w 传送门~xiu 一道dp 具体是啥dp呢我去看看题解咋说 嗯 区间dp(跟我想的一样 把环拆成链来做 n的范围比较小就直接枚举 ...
- [CF1107E]Vasya and Binary String【区间DP】
题目描述 Vasya has a string s of length n consisting only of digits 0 and 1. Also he has an array a of l ...
最新文章
- 使用浏览器wpf应用程序时访问数据库需要报权限错误的解决方法
- 计算机二级公共基础知识证书,计算机二级公共基础知识
- 一周一论文(翻译)——[SIGMOD 2015] TIMELY RTT-based Congestion Control for the Datacenter
- 论文笔记——Rich feature hierarchies for accurate object detection and semantic segmentation
- PHP 计算两个两个文件的相对路径
- 剖析Elasticsearch集群系列之一:Elasticsearch的存储模型和读写操作
- maven学习(一)
- mysql查询当天数据(上周、本月、上个月、距离当前现在6个月的数据)
- Java-GuardedBlocks与BusyWaitting忙等待
- python应用系列教程——python使用scapy监听网络数据包、按TCP/IP协议进行解析
- java.lang.stringind_为什么越界了? java.lang.StringIndexOutOfBoundsException
- 基于RV1126平台imx291分析 --- media部件注册 rkcif_mipi
- 校园学生管理系统设想
- C++中的extern
- 视频如何去水印-免费视频水印去除工具
- 按键截屏功能源码流程讲解
- 班级校园网页设计作业 静态HTML我的班级网页 DW班级网站模板 大学生简单班级网页作品代码 我的大学网页制作 学生班级网页设计作业
- android 强制卸载app,怎么强制删除安卓手机自带软件(三招就能卸载干净)
- 08.零售类公司分析•上
- SOA、RMI、RPC、Rest、RestFul、Soap、WebService 详解