题面

GarsiaWachs算法专门解决石子合并问题:

设一个序列是A[0..n-1],每次寻找最小的一个满足A[k-1]<=A[k+1]的k,那么我们就把A[k]与A[k-1]合并,并向前寻找一个第一个超过他们的和的数,把这个数插入到他后面;

#include<bits/stdc++.h>
#define inc(i,a,b) for(register int i=a;i<=b;i++)
#define dec(i,a,b) for(register int i=a;i>=b;i--)
using namespace std;
long long ans,n;
vector<int> l;
int merge()
{
register int k=l.size()-2;
inc(i,0,l.size()-2){
if(l[i]<=l[i+2]){
k=i;
break;
}
}
register int tmp=l[k]+l[k+1];
l.erase(l.begin()+k);
l.erase(l.begin()+k);
register int in=-1;
dec(i,k-1,0){
if(l[i]>tmp){
in=i;
break;
}
}
l.insert(l.begin()+in+1,tmp);
return tmp;
}
int main()
{
scanf("%d",&n);
inc(i,1,n){
register int tmp;
scanf("%d",&tmp);
l.push_back(tmp);
}
inc(i,0,n-2) ans+=merge();
cout<<ans;
return 0;
}

[SDOI2008]石子合并 题解的更多相关文章

  1. BZOJ 3229: [Sdoi2008]石子合并

    3229: [Sdoi2008]石子合并 时间限制: 3 Sec  内存限制: 128 MB提交: 497  解决: 240[提交][][] 题目描述 在一个操场上摆放着一排N堆石子.现要将石子有次序 ...

  2. 【BZOJ 3229】 3229: [Sdoi2008]石子合并 (GarsiaWachs算法)

    3229: [Sdoi2008]石子合并 Description 在一个操场上摆放着一排N堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合 ...

  3. [NOI1995]石子合并 题解

    一道经典的dp题 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1个算法,计算出将N堆石子 ...

  4. 洛谷 P1880 [NOI1995]石子合并 题解

    P1880 [NOI1995]石子合并 题目描述 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试 ...

  5. 洛谷 P5569 [SDOI2008]石子合并 GarsiaWachs算法

    石子合并终极通用版 #include<bits/stdc++.h> using namespace std ; ]; int n,t,ans; void combine(int k) { ...

  6. LOJ P10147 石子合并 题解

    Analysis 区间dp+前缀和 #include<iostream> #include<cstdio> #include<cstring> #include&l ...

  7. BZOJ-3229 石子合并 GarsiaWachs算法

    经典DP?稳T 3229: [Sdoi2008]石子合并 Time Limit: 3 Sec Memory Limit: 128 MB Submit: 426 Solved: 202 [Submit] ...

  8. 题解报告:NYOJ #737 石子合并(一)(区间dp)

    描述 有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为一堆.求出总的代价最小值 ...

  9. 石子合并(NOI1995)题解

    题目描述 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1个算法,计算出将N堆石子合并成1 ...

随机推荐

  1. IVIEW组件Table中加入EChart柱状图

    展示图如下: 主要利用了render函数和updated()钩子函数进行数据填充与渲染. 1.在Table的Colums中加入 1 { 2 title: '比例图', 3 align: 'center ...

  2. Java基础语法n

    BK      分段函数(SDUT 2257) import java.util.*; public class Main{ public static void main(String[] args ...

  3. Codeforces 645E. Intellectual Inquiry(DP,贪心)

    Codeforces 645E. Intellectual Inquiry 题意:给定一串字符,由前k个小写拉丁字母组成,要求在该字符串后面补上n个字符(也从前k个小写拉丁字母里面选),使得最后得到的 ...

  4. dcokee 安装 nginx

    1,docker pull openresty/openresty 2, mkdir  /opt/local/openresty  等等文件夹 3, docker run  --name=" ...

  5. R语言:各类型数据文件的导入

    导入csv: read.csv() 导入txt: read.table() 注意,txt文件编码为unicode的导入r会报错,需转换成ANSI 读入excel:需要安装xlsx包,安装此包前先下载好 ...

  6. sentinel备忘

    git https://github.com/alibaba/Sentinel   https://github.com/dubbo/dubbo-sentinel-supportdubbo http: ...

  7. springboot内置分页技术

    1,在pom.xml中注入分页的配置 <dependency> <groupId>com.github.pagehelper</groupId> <artif ...

  8. 终端less命令执行完之后怎样退出

    Linux中的less命令主要用来浏览文件内容,与more命令的用法相似,不同于more命令的是,less命令可往回卷动浏览以看过的部分,less 的用法比起 more 更加的有弹性.如果想退出les ...

  9. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_1-3.在线教育站点需求分析和架构设计

    笔记 3.在线教育站点需求分析和架构设计     简介:分析要开发的功能点和系统架构应该怎样架构 1.开发的功能:                     首页视频列表                ...

  10. 一百零八:CMS系统之封装权限判断功能

    在用户模型下定义属性和方法,用于判断用户的权限 @propertydef permissions(self): """ 返回用户拥有的所有权限 ""& ...