HDU3506环形石子合并问题

线性的石子合并问题比较好理解,环形的转成线性的方法就是扩展数组

1 2 3 . . . n 1 2 3 ... n

依据是我们最优的取值可以是 1 --- n也能是 2 --- n + 1,所以完全可以线性来做

     for(int i = 1;i <= 2 * n;i++)
{
if(i <= n) scanf("%d",&a[i]);
else a[i] = a[i-n]; sum[i] = sum[i-1] + a[i];
}

都快忘记了线性石子合并的问题了

未涉及四边形不等式优化前

dp[i][j]表示i到j元素区间内的权值和,sum[i][j]辅助dp[i][j]的状态转移

dp[i][j] = dp[i][k] + dp[k + 1][j] + sum[i][j]

所以我们枚举起点i之前要枚举区间的长度 l

最后应用上四边形不等式

先来看看初始化问题

    for(int i = 0;i <= 2*n;i++)
{
dp[i][i] = 0;
s[i][i] = i;
s[2*n][i] = 2 * n;
}

dp[i][i]仅仅一个元素权值为0——————权值根据题意来计算

s[i][i] 最优分界点 k = i

s[2*n][i] = 2 * n; 防止越界,规定一个上界,最高值也就是 2* n

好的,差不多啦,四边形不等式做到现在用的也很熟练了,还是得多练啊

/*
做的快忘得也挺快啊
石子问题
dp[i][j]表示的事从i到j的最优值
如何遍历j呢,就需要遍历区间的长度啦长度为1是无效的
*/ #include <iostream>
#include <cstdio>
#include <string.h>
#include <algorithm>
#define inf (1 << 30)
using namespace std;
const int maxn = 2 * (1e3 + 10);
int dp[maxn][maxn];
int s[maxn][maxn];
int a[maxn];
int sum[maxn];
int main()
{
int n;
while(~scanf("%d",&n))
{
sum[0] = 0;
for(int i = 1;i <= 2 * n;i++)
{
if(i <= n) scanf("%d",&a[i]);
else a[i] = a[i-n]; sum[i] = sum[i-1] + a[i];
} for(int i = 0;i <= 2*n;i++)
{
dp[i][i] = 0;
s[i][i] = i;
s[2*n][i] = 2*n;
} for(int l = 2;l <= n;l++)//区间长度
{
for(int i = 2 * n + 1 - l;i >= 1;i--)//起点
{
int j = i + l - 1;//终点
dp[i][j] = inf;
for(int k = s[i][j-1];k <= s[i+1][j];k++)
{
int tmp = dp[i][k] + dp[k+1][j] + sum[j] - sum[i-1];
if(dp[i][j] > tmp)
{
dp[i][j] = tmp;
s[i][j] = k;
}
}
}
}
int ans = inf;
for(int i = 1;i <= n;i++)
{
ans = min(ans,dp[i][i + n - 1]);
}
printf("%d\n",ans);
}
return 0;
}

HDU3506环形石子合并问题的更多相关文章

  1. HDU 3506 (环形石子合并)区间dp+四边形优化

    Monkey Party Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Tot ...

  2. HDU-3506 Monkey Party (环形石子合并)

    题目大意:n堆石子围成一圈,每堆石子的块数已知,每次可以将相邻的两堆合并到一堆,块数变为两堆之和,代价也为两堆石子块数之和.求合并到一堆的最小代价. 题目分析:先通过将前n-1依次个移到第n个后面,将 ...

  3. RQNOJ 490 环形石子合并

    题目链接:https://www.rqnoj.cn/problem/490 题目描述 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一 ...

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

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

  5. dp——环形石子合并(区间dp)

    环形的解决很巧妙 #include <iostream> #include <cstring> #include <string> #include <map ...

  6. 四边形不等式优化_石子合并问题_C++

    在动态规划中,经常遇到形如下式的状态转移方程: m(i,j)=min{m(i,k-1),m(k,j)}+w(i,j)(i≤k≤j)(min也可以改为max) 上述的m(i,j)表示区间[i,j]上的某 ...

  7. HRBUST - 1819 石子合并问题--圆形版(区间dp+环形+四边形优化)

    石子合并问题--圆形版 在圆形操场上摆放着一行共n堆的石子.现要将石子有序地合并成一堆.规定每次只能选相邻的两堆合并成新的一堆,并将新的一堆石子数记为该次合并的得分.请编辑计算出将n堆石子合并成一堆的 ...

  8. Luogu【P1880】石子合并(环形DP)

    先放上luogu的石子合并题目链接 这是一道环形DP题,思想和能量项链很像,在预处理过程中的手法跟乘积最大相像. 用一个m[][]数组来存储石子数量,m[i][j]表示从第 i 堆石子到第 j 堆石子 ...

  9. P1880 [NOI1995]石子合并[环形DP]

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

随机推荐

  1. PAT 1071 小赌怡情(15)(代码)

    1071 小赌怡情(15 分) 常言道"小赌怡情".这是一个很简单的小游戏:首先由计算机给出第一个整数:然后玩家下注赌第二个整数将会比第一个数大还是小:玩家下注 t 个筹码后,计算 ...

  2. hdu 1198 (并查集 or dfs) Farm Irrigation

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1198 有题目图11种土地块,块中的绿色线条为土地块中修好的水渠,现在一片土地由上述的各种土地块组成,需要浇 ...

  3. SD-WAN介绍

    SD-WAN SD-WAN特性 相关技术 Hybrid WAN WAN Optimization WAN edge router MPLS NFV SDN SD-WAN厂商 SD-WAN SD-WAN ...

  4. K-mer分析

    0. 基本参数 基因组大小:G Read读长:L 总Read条数:n_r 1. 碱基深度分布 单条Read测序覆盖到某一个碱基的概率:L/G 因为L/G很小,n_r很大,每个碱基覆盖深度服从泊松分布. ...

  5. 可迭代对象(Iterable)和迭代器(Iterator)

     迭代是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一 个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 1. 可迭代对象 以直接作用于 ...

  6. 从1~N中任选出三个数,最小公倍数最大

    已知一个正整数N,问从1~N中任选出三个数,它们的最小公倍数最大可以为多少. 当n为奇数:n.n-1.n-2这是三个最大数,并且它们两两互质.因为连续的奇.偶.奇,互质.连续的两个数互质是因为它们的公 ...

  7. UI设计初学者必看,这款设计神器教你快速入门

    网络时代,网页和手机App已经深入到人们生活的方方面面.这也使得App界面设计越来越受青年求职者们的青睐,并纷纷投入这个行业.但是,作为UI设计初学者,究竟如何才能快速的入门?当今市场上,是否有那么一 ...

  8. Tomcat+Redis+Nginx实现session共享(Windows版)

    redis安装:xx nginx安装:xx 步骤: 1.下载tomcat-redis-session-manager相应的jar包,主要有三个: wget https://github.com/dow ...

  9. Windows服务器支持json文件

    Windows服务器默认是不支持json文件的直接读取的.如在浏览器中输入地址访问或是通过代码访问,都是无法获取到数据的.需要在服务器端进行配置,让服务器支持解析.json扩展名的json文件. 方法 ...

  10. Bootstrap学习遇到的role属性--- 无障碍网页应用属性

    以前接触过Bootstrap,但也只是仅仅接触,现在重新学习下,今天看到一个例子中的属性有一个role, 查阅资料发现这个是--WAI-ARIA无障碍设计属性: 通俗说是该设计为了一些盲人,失聪,残疾 ...