Description

在操场上沿一直线排列着

n堆石子。

现要将石子有次序地合并成一堆。规定每次仅仅能选相邻的两堆石子合并成新的一堆,

并将新的一堆石子数记为该次合并的得分。同意在第一次合并前对调一次相邻两堆石子的次序。

计算在上述条件下将n堆石子合并成一堆的最小得分。

Input

输入数据共同拥有二行,当中,第1行是石子堆数n≤100;



第2行是顺序排列的各堆石子数(≤20),每两个数之间用空格分隔。

Output

输出合并的最小得分。

Sample Input

3
2 5 1

Sample Output

11

Hint

 

Source

NOI1995

上课刚教的区间dp。对于第一次能够选择换顺序的要求,能够採用枚举交换。最后比較得出最小值就可以。

dp[ i ][ j ]表示从区间i到j合并的得分,再设置一个sum[i][j],表示i到j的总和。

#include<stdio.h>
#include<string.h>
int a[50];
int main()
{
int n,i,j,k,dp[105][105],l,len,sum[105][105],maxi=10000000,x,t,s;
int zhong;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
x=n-1;s=0;
while(x--)
{
s++;
t=a[s];
a[s]=a[s+1];
a[s+1]=t;
for(i=1;i<=n;i++)
{
dp[i][i]=0;
sum[i][i]=a[i];
for(j=i+1;j<=n;j++)
sum[i][j]=sum[i][j-1]+a[j]; //初始化sum
}
t=a[s];
a[s]=a[s+1];
a[s+1]=t;
for(i=2;i<=n;i++) //i代表区间长度,表示区间从小到大进行合并
{
for(j=1;j<=n-i+1;j++) //j表示起点
{
zhong=j+i-1; //终点
dp[j][zhong]=10000000; //初始化最大
for(k=j;k<=zhong-1;k++)
{
if(dp[j][zhong]>dp[j][k]+dp[k+1][zhong]+sum[j][zhong])
{dp[j][zhong]=dp[j][k]+dp[k+1][zhong]+sum[j][zhong];}
}
}
} if(maxi>dp[1][n])maxi=dp[1][n]; }
printf("%d\n",maxi);
}

zjnu 1181 石子合并(区间DP)的更多相关文章

  1. 洛谷 P1880 [NOI1995] 石子合并(区间DP)

    传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 题解: 这道题是石子合并问题稍微升级版 这道题和经典石子合并问题的不同在于,经典的石子合 ...

  2. 石子合并 区间dp模板

    题意:中文题 Description 在操场上沿一直线排列着 n堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的两堆石子合并成新的一堆, 并将新的一堆石子数记为该次合并的得分.允许在第一次合 ...

  3. HDU4632 Poj2955 括号匹配 整数划分 P1880 [NOI1995]石子合并 区间DP总结

    题意:给定一个字符串 输出回文子序列的个数    一个字符也算一个回文 很明显的区间dp  就是要往区间小的压缩! #include<bits/stdc++.h> using namesp ...

  4. zjnu(1181)——石子合并

    这道题算是最简单的区间dp了..非常久之前写的,搞懂原理了就1A. 传送门:problem_id=1181">http://acm.zjnu.edu.cn/CLanguage/show ...

  5. 石子合并 区间DP模板题

    题目链接:https://vjudge.net/problem/51Nod-1021 题意 N堆石子摆成一条线.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石 ...

  6. 洛谷 P1080 石子合并 ( 区间DP )

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

  7. 石子合并——区间dp

    石子合并(3种变形) <1> 题目: 有N堆石子排成一排(n<=100),现要将石子有次序地合并成一堆,规定每次只能选相邻的两堆合并成一堆,并将新的一堆的石子数,记为改次合并的得分, ...

  8. 洛谷P1880 石子合并(环形石子合并 区间DP)

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

  9. HRBUST - 1818 石子合并 区间dp入门

    有点理解了进阶指南上说的”阶段,状态和决策“ /* 区间dp的基础题: 以区间长度[2,n]为阶段,枚举该长度的区间,状态dp[l][r]表示合并区间[l,r]的最小费用 状态转移方程dp[l][r] ...

随机推荐

  1. ACM_一道耗时间的水题

    一道耗时间的水题 Time Limit: 2000/1000ms (Java/Others) Problem Description: Do you know how to read the phon ...

  2. ACM_写数字

    写数字 Time Limit: 2000/1000ms (Java/Others) Problem Description: 把由1开始的自然数依次写下来:123456789101112……,重新分组 ...

  3. spring jdbc、事务(三)

    spring整合jdbc spring中提供了一个可以操作数据库的对象(JDBCTemplate),对象封装了jdbc技术. 1.使用spring整合jdbc需要jdbc驱动.c3p0连接池.spri ...

  4. HTML学习(2018.1.18)

    1,         转义字符 转义字符:用于表示网页中的特殊字符 XHTML不直接输入符号,建议使用转义字符. &nbsp------空格: &copy------版权: & ...

  5. Android开机图片替换

    Android开机图片替换 Android从启动到进入Launcher一共会展示三张图片,如果只是更换静态图则更换这三张图片即可,要想换成动画那就要另外操作. 首先查找这个文件:    /bootab ...

  6. js-事件处理(重点)

    1:各种常用事件: 2:简单用法: <body onLoad="javascript:alert('hello world');" onUnload="javasc ...

  7. py2exe打包遇到的问题

    py2exe打包python成.exe文件 打包过程和结果 1.创建setup脚本打包文件,其中设置打包的属性和方法.注意:尽量将被打包文件和此打包脚本放在同目录下(因为在尝试非同目录下时,出现了非可 ...

  8. 【Linux】ubuntu中怪异的vi编辑器

    由于前几天一场windows系统的比特币勒索病毒,我下狠心装了Linux的ubuntu版本.可是今天在使用命令行中的vi编辑器时出现了怪异的现象:backspace不能删除,编辑模式回车随机出现字母. ...

  9. vue路由中的 Meta

    在项目中肯定有这样的需求,那就是在某个页面的时候,顶部展示 现在当前的页面路径,如下图: 这个在vue中其实很好实现. 首先出现这个肯定是相对应不同的页面,也就是说对应不同的路由,我们在定义路由的时候 ...

  10. BZOJ 1738: [Usaco2005 mar]Ombrophobic Bovines 发抖的牛 网络流 + 二分 + Floyd

    Description FJ's cows really hate getting wet so much that the mere thought of getting caught in the ...