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 在一个遥远的国 ...
随机推荐
- windows版idea 2018.3.5版 永久激活教程
1.下载idea并安装:https://download.jetbrains.com/idea/ideaIU-2018.3.5.exe?_ga=2.179947812.1869744014.15658 ...
- 网络和Web编程
一.以客户端的形式同HTTP服务交互 (1)使用urllib.request模块发送HTTP GET请求 from urllib import request,parse url = 'http:// ...
- C/C++应用--Window下获取硬件信息(CPU, 硬盘,网卡等)
一.头文件如下: #include <Windows.h> #include <string> #include <iostream> #include <w ...
- tarjan模板(带注释)
//dfsn[x]记录x节点有没有被访问过,有,则是第几个 //lowlink[x]记录x能到的祖先中编号最小的 //dfs_clock是个编号累计器 //scc记录一个 inline void df ...
- 7.26T1四分图匹配
四分图匹配 题目描述 一天晚上,zzh 在做梦,忽然梦见了她. 见到她,zzh 也不去看她,只顾低头自语…… “噫,OI 这个东西,真是无奇不有.” “嘿,你又学了什么?” “嗯,学到了一种算法,”z ...
- codeforces gym #101987B- Cosmetic Survey(floyd)
题目链接: https://codeforces.com/gym/101987/my 题意: 顶点数为$n$,边数为$m$ 求出每个点对$(a,b)$,$a$到$b$的最小路径的最大值 数据范围: $ ...
- elasticsearch _mapping api
https://www.elastic.co/guide/cn/elasticsearch/guide/current/mapping-intro.html通过 /_mapping ,我们可以查看 E ...
- 笔记四(Competitor Analysis Test小结)
1.关机后启动电脑,测试BIOS的POST time 2.进入睡眠模式后,按任意键,通过Windows logs查看bios的init时间 3.进入BIOS setup的快捷键,一般为F2 4.进入B ...
- matplotlib画图报错This figure includes Axes that are not compatible with tight_layout, so results might be incorrect.
之前用以下代码将实验结果用matplotlib show出来 plt.plot(np.arange(len(aver_reward_list)), aver_reward_list) plt.ylab ...
- 中国萌兔-月饼工厂流水线 -万圣节萌宠-月饼售罄后续-B站东予薏米
B站(Blibli)up主,东予薏米.下面画的五只兔兔,两只狗狗,一只猫猫都是她家的 啊!有个会画画的主人真是幸福- 蹦迪的那个兔兔头昏脑胀,敷了冰袋和膏药哈哈哈哈,好可爱! 下班了下班了~今天真是太 ...