cogs 80. 石子归并 动态规划
80. 石子归并
★★ 输入文件:shizi.in 输出文件:shizi.out 简单对比
时间限制:1 s 内存限制:128 MB
设有N堆沙(shi)子排成一排,其编号为1,2,3,…,N(N<=100)。每堆沙子有一定的数量。现要将N堆沙子并成为一堆。归并的过程只能每次将相邻的两堆沙子堆成一堆(每次合并花费的代价为当前两堆沙子的总数量),这样经过N-1次归并后成为一堆,归并的总代价为每次合并花费的代价和。找出一种合理的归并方法,使总的代价最小。
采用第二种方案可取得最小总代价,值为43。
【输入格式】
输入由若干行组成,第一行有一个整数,n(1≤n≤100);表示沙子堆数。第2至n+1行是每堆沙子的数量。
【输出格式】
一个整数,归并的最小代价。
【输入样例】
输入文件名:shizi.in
7
13
7
8
16
21
4
18
【输出样例】
输出文件名:shizi.out
239
唉 已经多年没有做dp了
我本来dp就一窍不通(暴力走天下)
现在觉得还是练一下为好(暴力并非通用)
这一道题看起来好像还是可以暴力的哦(n<=100)
但是我们用动态规划来弄一下试试
这一道题很显然 是一道动态规划题
我们可以用f[i][j]表示从第i个石子到第j个石子的最小的合并费用
我们当然要再弄一个前缀和的数组 sum[i]表示前i个石子的重量和
状态转移方程竟然想出来了!
f[i][j]=min(f[i][k]+f[k+1][j]+sum[i]-sum[j-1])
那么这个样子就非常的简单了
也就是说i<=k<j
就是说i-k 和 k+1-j 这两石子合并起来 首先要加上原来这两堆石子已经产生的代价 就是两个f 还有这两对石子合并在一起的代价
其实只要状态转移方程想出来了 就都非常简单了
代码也是非常的简短
但是 我却非常完美地想错了
这一道题我直接连样例都没有过 这是为什么呢?
首先先讲一讲 我原来是怎么做错的吧
我原来就是三层循环 ijk 若无其事地跑了一遍 发现结果输出了313
QAQ
这到底是是怎么回事呢?
终于想明白了
这一道题在石子进行合并的时候是先从比较短的长度逐渐合并成大区间的
所以三层循环 第一层应该是区间的长度才对 第二层是i j就是i加上那个区间长度
最后一层是k
然后重点!这一道题的数据范围有坑儿 开105大小70分 115大小80分 最后无奈一下子开了一个205才100的
代码:
#include<bits/stdc++.h>
#define maxn 205
#define ll long long
using namespace std;
int n;
ll dp[maxn][maxn];
ll sum[maxn];
inline int read()
{
int X=; bool flag=; char ch=getchar();
while(ch<''||ch>'') {if(ch=='-') flag=; ch=getchar();}
while(ch>=''&&ch<='') {X=(X<<)+(X<<)+ch-''; ch=getchar();}
if(flag) return X;
return ~(X-);
}
int main()
{
freopen("shizi.in","r",stdin);
freopen("shizi.out","w",stdout);
n=read();
memset(dp,0x3f,sizeof(dp));
for(int i=,x;i<=n;i++)
{
x=read(); sum[i]=sum[i-]+x; dp[i][i]=;
}
// for(int i=1;i<n;i++)
// for(int j=i+1;j<=n;j++)
// for(int k=i;k<j;k++)
// dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+sum[j]-sum[i-1]);
for(int len=;len<n;len++)
for(int Left=;Left<n;Left++)
{
int Right=Left+len;
for(int Middle=Left;Middle<Right;Middle++)
dp[Left][Right]=min(dp[Left][Right],dp[Left][Middle]+dp[Middle+][Right]+sum[Right]-sum[Left-]);
}
printf("%lld",dp[][n]);
return ;
}
cogs 80. 石子归并 动态规划的更多相关文章
- Codevs_2102_石子归并2_(环状动态规划)
描述 http://codevs.cn/problem/2102/ 2102 石子归并 2 时间限制: 10 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题目 ...
- Codevs_1048_石子归并_(动态规划)
描述 http://codevs.cn/problem/1048/ 1048 石子归并 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Des ...
- Codevs 1048 石子归并
1048 石子归并 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合 ...
- AC日记——石子归并 51nod 1021
石子归并 思路: 经典动态规划——归并类问题: 我们把状态划为n个,即1-n的n个长度为n个状态: 那么,每个长度为i的状态都可以由i-1个长度为i-1的状态推出: 所以,dp转移方程: dp[i][ ...
- codevs 2102 石子归并2
传送门 2102 石子归并 2 时间限制: 10 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题目描述 Description 在一个园形操场的四周摆放N堆石子,现要将 ...
- codevs 1048石子归并
传送门 1048 石子归并 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], ...
- 2102 石子归并 2codevs
2102 石子归并 2codevs 题目描述 Description 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为 ...
- Codevs 3002 石子归并 3(DP四边形不等式优化)
3002 石子归并 3 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次 ...
- AC日记——石子归并 codevs 1048
1048 石子归并 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 有n堆石子排成一列,每堆石子 ...
随机推荐
- BeautifulSoup库整理
BeautifulSoup库 一.BeautifulSoup库的下载以及使用 1.下载 pip3 install beautifulsoup4 2.使用 improt bs4 二.BeautifulS ...
- MapReduce之提交job源码分析 FileInputFormat源码解析
MapReduce之提交job源码分析 job 提交流程源码详解 //runner 类中提交job waitForCompletion() submit(); // 1 建立连接 connect(); ...
- echarts在react项目中的使用
数据可视化在前端开发中经常会遇到,万恶的图表,有时候总是就差一点,可是怎么也搞不定. 别慌,咱们一起来研究. 引入我就不多说了 npm install echarts 对于基础的可视化组件,我一般采用 ...
- 【git】Git的使用
一.安装git 1.windows下安装一个Git 2.lInux下yum(apt-get) install git 二.使用git连接github 使用git连接github时,需要将linux下产 ...
- 將Python打包成 exe可执行文件
利用Python寫了一個小腳本想要傳給使用Windows但沒有裝Python的朋友執行,這時候就可以利用將檔案包裝成exe檔案,讓沒有Python的朋友也可以執行.本篇將介紹利用套件「PyInstal ...
- python模块知识二 random -- 随机模块、序列化 、os模块、sys -- 系统模块
4.random -- 随机模块 a-z:97 ~ 122 A-Z :65 ~ 90 import random #浮点数 print(random.random())#0~1,不可指定 print( ...
- Wireshark着色规则
wireshark抓包蓝色和红色 在默认情况下 蓝色适合红色相反的方向 绿色背景的是HTTP包灰色背景的是TCP包.黑色背景的是TCP错误包或者校验和错误的包 有时候wireshark抓的包还有颜色区 ...
- Ubuntu中修改默认开机项
1首先,按住Ctrl+Alt+t打开终端 2输入cd /etc/default 3输入sudo sudo nano grub 并按照提示输入密码 4在我们开机的时候,可以看到自己想要默认的开机项是多少 ...
- 详解 git 忽略文件 删除远端仓库的文件
要解决的问题 忽略指定类型的文件 或 某个指定文件(夹) 将已经push到github的文件删除, 但本地的文件不删除 (写忽略规则之前就把这个文件夹push了 T_T ) 将想要忽略掉的文件的相关记 ...
- 记录eclipse中文出现空格宽度不一致的bug
起因 不久前更新了 eclipse(2019-03) 版本:突然发现出现了,使用注释使用中出现的空格的间隔大小不一致的问题,具体可以看下图: 遇到这种问题简直逼不能忍,在网上搜一下解决方式: 谷歌 搜 ...