codevs 1048/洛谷 1880:石子归并
有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1]。问安排怎样的合并顺序,能够使得总合并代价达到最小。
第一行一个整数n(n<=100)
第二行n个整数w1,w2...wn (wi <= 100)
一个整数表示最小合并代价
4
4 1 1 4
18
芒果君:这是我博客的第一道题啊~是一道DP啊~其实刚看到的时候有点懵,然后又看了一本通上的代码,果然,我并没有恍然大悟OTZ 用f[i][j]表示从第i个到第j个的最小合并代价,状态转移方程是,f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+s[j]-s[i-1]),就是判断原来的方案和你枚举的新的两端合并起来哪个更小。然后这道题也告诉我memset新的用法……
#include<cstdio>
#include<cstring>
using namespace std;
int f[][],s[],n,i,j,k,x;
int min(int a,int b)
{
return a<b?a:b;
}
int main()
{
scanf("%d",&n);
for(i=;i<=n;++i)
{
scanf("%d",&x);
s[i]=s[i-]+x;//求前缀和
}
memset(f,/,sizeof(f));//把每一位都赋予一个很大的整数
for(i=;i<=n;++i)
{
f[i][i]=;//自己合并自己花费是0
}
for(i=n-;i>=;--i)//合并2个、合并3个……合并n个
{
for(j=i+;j<=n;++j)//枚举长度
{
for(k=i;k<=j-;++k)//把这个长度里划成两段
{
f[i][j]=min(f[i][j],f[i][k]+f[k+][j]+s[j]-s[i-]);
}
}
}
printf("%d",f[][n]);
return ;
}
然后这道题还有一个升级版,就是洛谷的1880,只不过把这个链状的变成了环状的,最大值和最小值都要求,我就稍微改了一下,比如第一次做“1 2 3 4 5”,第二次做“2 3 4 5 1”,第五次做“5 1 2 3 4”,这样就解决问题了。
#include<cstdio>
#include<cstring>
using namespace std;
int f1[][],f2[][],a[],s[],n,i,j,k,t,x,MIN=<<,MAX;
int min(int a,int b)
{
return a<b?a:b;
}
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
scanf("%d",&n);
for(i=;i<=n;++i)
{
scanf("%d",&a[i]);
}
for(t=;t<=n;++t)
{
for(i=;i<t;++i)
{
s[i]=s[i-]+a[n+i-t+];
}
for(i=t;i<=n;++i)
{
s[i]=s[i-]+a[i-t+];
}
memset(f1,/,sizeof(f1));
memset(f2,,sizeof(f2));
for(i=;i<=n;++i)
{
f1[i][i]=;
f2[i][i]=;
}
for(i=n-;i>=;--i)
{
for(j=i+;j<=n;++j)
{
for(k=i;k<=j-;++k)
{
f1[i][j]=min(f1[i][j],f1[i][k]+f1[k+][j]+s[j]-s[i-]);
f2[i][j]=max(f2[i][j],f2[i][k]+f2[k+][j]+s[j]-s[i-]);
}
}
}
MIN=min(f1[][n],MIN);
MAX=max(f2[][n],MAX);
}
printf("%d\n%d\n",MIN,MAX);
return ;
}
codevs 1048/洛谷 1880:石子归并的更多相关文章
- [codevs1048]石子归并&[codevs2102][洛谷P1880]石子归并加强版
codevs1048: 题目大意:有n堆石子排成一列,每次可合并相邻两堆,代价为两堆的重量之和,求把他们合并成一堆的最小代价. 解题思路:经典区间dp.设$f[i][j]$表示合并i~j的石子需要的最 ...
- 洛谷P1880 石子合并(区间DP)(环形DP)
To 洛谷.1880 石子合并 题目描述 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1 ...
- 洛谷1880 区间dp+记忆化搜索 合并石子
题目网址:https://www.luogu.com.cn/problem/P1880 题意是:给定一个序列,最小规则是相邻两个值的合并,开销是他们的和,将整个序列合并成一个值的情况下,求解该值的最小 ...
- 洛谷P1880 石子合并(环形石子合并 区间DP)
题目描述 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1个算法,计算出将N堆石子合并成1 ...
- 经典DP 洛谷p1880 石子合并
https://www.luogu.org/problemnew/show/P1880 题目 题目描述 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新 ...
- 洛谷 P1880 石子合并
题目描述 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1个算法,计算出将N堆石子合并成1 ...
- 洛谷 P1080 石子合并 ( 区间DP )
题意 : 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分.试设计出1个算法,计算出将N堆石子合并成1堆 ...
- Codevs 3729==洛谷P1941 飞扬的小鸟
P1941 飞扬的小鸟 456通过 2.4K提交 题目提供者该用户不存在 标签动态规划2014NOIp提高组 难度提高+/省选- 提交该题 讨论 题解 记录 题目描述 Flappy Bird 是一 ...
- CODEVS 1066/洛谷 P1514引水入城
1066 引水入城 2010年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 在一个遥远的国 ...
随机推荐
- myEclipse设置
字符集设置 点击菜单:window——preferences 输入:Workspace 字体大小设置 输入:colors and fonts 本机字体:14 显示行号 输入:Text Editors ...
- javaMail 详解
原文:http://www.matrix.org.cn/resource/article/44/44101_JavaMail.html 一.JavaMail API简介JavaMail API是读取. ...
- 让JPA的Query查询接口返回Map对象
在JPA 2.0 中我们可以使用entityManager.createNativeQuery()来执行原生的SQL语句. 但当我们查询结果没有对应实体类时,query.getResultList() ...
- 047_批量下载有序文件(pdf、图片、视频等等)
#!/bin/bash#本脚本准备有序的网络资料进行批量下载操作(如 01.jpg,02.jpg,03.jpg)#设置资源来源的域名连接 url="http://www.test.com/& ...
- 046_Shell 脚本的 fork 炸弹
#!/bin/bash#快速消耗计算机资源,致使计算机死机#定义函数名为.(点), 函数中递归调用自己并放入后台执行.() {.|.& };.
- 2019.7.9 校内测试 T2 极值问题
这一次是交流测试?边交流边测试(滑稽 极值问题 乍一看这是一道数学题,因为1e9的数据让我暴力的心退却. 数学又不好,不会化简式子嘞,咋办? 不怕,咱会打表找规律.(考场上真的是打表找出了规律,打表打 ...
- SSRF漏洞攻击利用从浅到深
梳理一下ssrf 不详细 简单记录 0x01 SSRF成因和基本利用0x02 内网打未授权redis0x03 关于ssrf打授权的redis0x04 写redis shell和密钥的一点问题0x05 ...
- java 生成随机数 自定义
public static void main(String[] args) { int max=10000; int min=1000; Random random = new Random(); ...
- postgresql could not connect to server
问题: postgresql部署在linux上,在自己电脑上使用pgadmin连接出现could not connect to server错误 问题分析: 出现上述原因有3种情况 1.linux上的 ...
- Dubbo系列(三)dubbo的核心技术--RPC调用
dubbo的核心技术--RPC调用:分为俩部分RPC协议Protocol和方法调用Invoke: 一.RPC协议Protocol(Remote Procedure Call)远程过程调用协议 1.我们 ...