N堆石子摆成一条线。现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的代价。计算将N堆石子合并成一堆的最小代价。
 
例如: 1 2 3 4,有不少合并方法
1 2 3 4 => 3 3 4(3) => 6 4(9) => 10(19)
1 2 3 4 => 1 5 4(5) => 1 9(14) => 10(24)
1 2 3 4 => 1 2 7(7) => 3 7(10) => 10(20)
 
括号里面为总代价可以看出,第一种方法的代价最低,现在给出n堆石子的数量,计算最小合并代价。
 
Input
第1行:N(2 <= N <= 100)
第2 - N + 1:N堆石子的数量(1 <= A[i] <= 10000)
Output
输出最小合并代价
Input示例
4
1
2
3
4
Output示例
19
#include<iostream>
#include<cstdio>
#include<string.h>
using namespace std;
const int maxx=;
const int INF=0x3f3f3f3f;
int n,num[maxx],dp[maxx][maxx],sum[maxx][maxx];
int main(){
while(~scanf("%d",&n)){
for(int i=;i<=n;i++){
scanf("%d",&num[i]);
}
memset(sum,,sizeof(sum));
for(int i=;i<=n;i++){
for(int j=i;j<=n;j++){
sum[i][j]=sum[i][j-]+num[j];
}
}
memset(dp,INF,sizeof(dp));
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
if(i>=j){
dp[i][j]=;
}
}
}
for(int i=;i<=n;i++){
for(int j=i-;j>=;j--){
for(int k=j;k<i;k++){
dp[j][i]=min(dp[j][i],dp[j][k]+dp[k+][i]+sum[j][i]);
}
}
}
printf("%d\n",dp[][n]);
}
return ;
}
基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题
 
N堆石子摆成一个环。现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的代价。计算将N堆石子合并成一堆的最小代价。
 
例如: 1 2 3 4,有不少合并方法
1 2 3 4 => 3 3 4(3) => 6 4(9) => 10(19)
1 2 3 4 => 1 5 4(5) => 1 9(14) => 10(24)
1 2 3 4 => 1 2 7(7) => 3 7(10) => 10(20)
 
括号里面为总代价可以看出,第一种方法的代价最低,现在给出n堆石子的数量,计算最小合并代价。
 
Input
第1行:N(2 <= N <= 1000)
第2 - N + 1:N堆石子的数量(1 <= A[i] <= 10000)
Output
输出最小合并代价
Input示例
4
1
2
3
4
Output示例
19
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<string.h>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<cmath> using namespace std;
const int N=;
int n,f[N][N]={},a[N][N]={};
int s[N][N];
int main(){
memset(f,,sizeof(f));
scanf("%d",&n);
for(int i=;i<n;i++){
scanf("%d",&a[i][i]);
a[n+i][n+i]=a[i][i];
}
for(int i=;i<n*;i++){
s[i][i]=i;
f[i][i]=;
}
for(int i=;i<n*-;i++){
for(int j=i+;j<n*-;j++){
a[i][j]=a[i][j-]+a[j][j];
}
}
for(int l=;l<n;l++){
for(int i=;i+l<n*-;i++){
int j=i+l;
for(int k=s[i][j-];k<=s[i+][j];k++){
if(f[i][j] > a[i][j]+f[i][k]+f[k+][j])
{
f[i][j] = a[i][j]+f[i][k]+f[k+][j];
s[i][j] = k;
}
}
}
}
int ans=f[][n-];
for(int i=;i<n;i++){
if(ans>f[i][i+n-]){
ans=f[i][i+n-];
}
}
printf("%d\n",ans);
return ; }
基准时间限制:2 秒 空间限制:131072 KB 分值: 320 难度:7级算法题
 
N堆石子摆成一条线。现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的代价。计算将N堆石子合并成一堆的最小代价。
 
例如: 1 2 3 4,有不少合并方法
1 2 3 4 => 3 3 4(3) => 6 4(9) => 10(19)
1 2 3 4 => 1 5 4(5) => 1 9(14) => 10(24)
1 2 3 4 => 1 2 7(7) => 3 7(10) => 10(20)
 
括号里面为总代价可以看出,第一种方法的代价最低,现在给出n堆石子的数量,计算最小合并代价。
 
Input
第1行:N(2 <= N <= 50000)
第2 - N + 1:N堆石子的数量(1 <= A[i] <= 10000)
Output
输出最小合并代价
Input示例
4
1
2
3
4
Output示例
19
#include <iostream>
#include <string.h>
#include <stdio.h> using namespace std;
const int N = ; int stone[N];
long long n,t,ans; void combine(int k)
{
int tmp = stone[k] + stone[k-];
ans += tmp;
for(int i=k;i<t-;i++)
stone[i] = stone[i+];
t--;
int j = ;
for(j=k-;j> && stone[j-] < tmp;j--)
stone[j] = stone[j-];
stone[j] = tmp;
while(j >= && stone[j] >= stone[j-])
{
int d = t - j;
combine(j-);
j = t - d;
}
} int main()
{
while(scanf("%lld",&n)!=EOF)
{
if(n == ) break;
for(int i=;i<n;i++)
scanf("%d",stone+i);
t = ;
ans = ;
for(int i=;i<n;i++)
{
stone[t++] = stone[i];
while(t >= && stone[t-] <= stone[t-])
combine(t-);
}
while(t > ) combine(t-);
printf("%lld\n",ans);
}
return ;
}

石子归并的三种打开方式——难度递增———51Node的更多相关文章

  1. 文件的三种打开方式及with管理文件上下文

    文件的三种打开方式及with管理文件上下文 一.文件的三种打开方式 1.1 只读 f = open(r'D:\pycharm\yjy\上海python学习\456.txt','r',encoding= ...

  2. linux学习之centos(二):虚拟网络三种连接方式和SecureCRT的使用

    ---操作环境--- 虚拟机版本:VMware Workstation_10.0.3 Linux系统版本:CentOS_6.5(64位) 物理机系统版本:win10  一.虚拟网络三种连接方式 当在V ...

  3. IIS下PHP的三种配置方式比较

    在Windows IIS 6.0下配置PHP,通常有CGI.ISAPI和FastCGI三种配置方式,这三种模式都可以在IIS 6.0下成功运行,下面我就讲一下这三种方式配置的区别和性能上的差异. 1. ...

  4. MyEclipse中web服务器的三种配置方式

    初学Javaweb开发的人们都会遇到一个问题,就是服务器环境的搭建配置问题.下面介绍三种服务器的搭建方式. 直接修改server.xml文件 当你写了一个web应用程序(jsp/servlet),想通 ...

  5. Linq to Sql : 三种事务处理方式

    原文:Linq to Sql : 三种事务处理方式 Linq to SQL支持三种事务处理模型:显式本地事务.显式可分发事务.隐式事务.(from  MSDN: 事务 (LINQ to SQL)).M ...

  6. SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论 SignalR 简单示例 通过三个DEMO学会SignalR的三种实现方式 SignalR推送框架两个项目永久连接通讯使用 SignalR 集线器简单实例2 用SignalR创建实时永久长连接异步网络应用程序

    SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论   异常汇总:http://www ...

  7. python-web自动化-三种等待方式

    当有元素定位不到时,比如下拉框,弹出框等各种定位不到时:一般是两种问题:1 .有frame :2.没有加等待 下面学习三种等待方式: 1.强制等待 sleep(xx)这种方法简单粗暴,不管浏览器是否加 ...

  8. Linux基石【第二篇】虚拟网络三种连接方式(转载)

    在虚拟机上安装完Centos系统后,开始配置静态IP,以方便在本宿主机上可以访问虚拟机,在曲折的配置中,了解到虚拟机还有三种连接方式:Bridged,NAT和Host-only,于是,我又一轮新的各种 ...

  9. Entity Framework 5.0系列之EF概览-三种编程方式

    概述 在开发面向数据的软件时我们常常为了解决业务问题实体.关系和逻辑构建模型而费尽心机,ORM的产生为我们提供了一种优雅的解决方案.ADO.NET Entity Framework是.NET开发中一种 ...

随机推荐

  1. mysql 1055 的错误

    1.Err1055,出现这个问题往往是在执行sql语句时候,在最后一行会出现这个问题. [Err] 1055 - Expression #1 of ORDER BY clause is not in ...

  2. 在网页标题上加个logo

    只需在title标签上加个link标签即可 <link rel="icon" href="images/icon.png" > <title& ...

  3. 你们知道SEO每天都在做什么吗?

    医院也有做SEO的,专门负责医院网站优化工作,那么医院的SEO每天都做什么呢?偶然见到一篇文章,转载来分享给大家.感觉写的很实在. 大凡做seo工作的人都知道seo工作者每天都要做大量的外链,像有些个 ...

  4. php-语言参考-基本语法3.1

    一,PHP代码的开始和结束标记 1,<?php 和 ?> //重点 2,<script language="php"> 和 </script> ...

  5. C# 打开帮助文档,打开电脑中其他应用或者文件

    打开帮助文档 System.Diagnostics.Process.Start(Directory.GetCurrentDirectory() + "\\" + "hel ...

  6. C++机试笔记

  7. [Bzoj2282]消防(二分答案+树的直径)

    Description 某个国家有n个城市,这n个城市中任意两个都连通且有唯一一条路径,每条连通两个城市的道路的长度为zi(zi<=1000). 这个国家的人对火焰有超越宇宙的热情,所以这个国家 ...

  8. IDA 对 so 的动态调试

    将IDAPro根目录下dbgsrv 目录下的android_server(模拟器用android_x86_server,这里还是用真机好点)文件push 到安卓设备(比如/data/local/tmp ...

  9. Numpy数据存取与函数

    数据的CSV文件存取 多维数据的存取 NumPy的随机数函数 NumPy的统计函数 NumPy的梯度函数

  10. Flume使用(案例分析)

    Flume官方文档 Usage: bin/flume-ng <command> [options]... commands: help display this help text age ...