石子归并的三种打开方式——难度递增———51Node
第1行:N(2 <= N <= 100)
第2 - N + 1:N堆石子的数量(1 <= A[i] <= 10000)
输出最小合并代价
4
1
2
3
4
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行:N(2 <= N <= 1000)
第2 - N + 1:N堆石子的数量(1 <= A[i] <= 10000)
输出最小合并代价
4
1
2
3
4
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 ; }
第1行:N(2 <= N <= 50000)
第2 - N + 1:N堆石子的数量(1 <= A[i] <= 10000)
输出最小合并代价
4
1
2
3
4
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的更多相关文章
- 文件的三种打开方式及with管理文件上下文
文件的三种打开方式及with管理文件上下文 一.文件的三种打开方式 1.1 只读 f = open(r'D:\pycharm\yjy\上海python学习\456.txt','r',encoding= ...
- linux学习之centos(二):虚拟网络三种连接方式和SecureCRT的使用
---操作环境--- 虚拟机版本:VMware Workstation_10.0.3 Linux系统版本:CentOS_6.5(64位) 物理机系统版本:win10 一.虚拟网络三种连接方式 当在V ...
- IIS下PHP的三种配置方式比较
在Windows IIS 6.0下配置PHP,通常有CGI.ISAPI和FastCGI三种配置方式,这三种模式都可以在IIS 6.0下成功运行,下面我就讲一下这三种方式配置的区别和性能上的差异. 1. ...
- MyEclipse中web服务器的三种配置方式
初学Javaweb开发的人们都会遇到一个问题,就是服务器环境的搭建配置问题.下面介绍三种服务器的搭建方式. 直接修改server.xml文件 当你写了一个web应用程序(jsp/servlet),想通 ...
- Linq to Sql : 三种事务处理方式
原文:Linq to Sql : 三种事务处理方式 Linq to SQL支持三种事务处理模型:显式本地事务.显式可分发事务.隐式事务.(from MSDN: 事务 (LINQ to SQL)).M ...
- 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 ...
- python-web自动化-三种等待方式
当有元素定位不到时,比如下拉框,弹出框等各种定位不到时:一般是两种问题:1 .有frame :2.没有加等待 下面学习三种等待方式: 1.强制等待 sleep(xx)这种方法简单粗暴,不管浏览器是否加 ...
- Linux基石【第二篇】虚拟网络三种连接方式(转载)
在虚拟机上安装完Centos系统后,开始配置静态IP,以方便在本宿主机上可以访问虚拟机,在曲折的配置中,了解到虚拟机还有三种连接方式:Bridged,NAT和Host-only,于是,我又一轮新的各种 ...
- Entity Framework 5.0系列之EF概览-三种编程方式
概述 在开发面向数据的软件时我们常常为了解决业务问题实体.关系和逻辑构建模型而费尽心机,ORM的产生为我们提供了一种优雅的解决方案.ADO.NET Entity Framework是.NET开发中一种 ...
随机推荐
- 路由器基础配置之单臂路由实现vlan间通信
我们将以上面的拓扑图开始进行配置,目的为设置单臂路由实现vlan间通信,设置4个vlan,pc0,1,2为vlan10 pc3,4,5为vlan20:pc6,7,8为vlan30:server0,1为 ...
- nginx 报错: nginx: [emerg] open() "/etc/nginx/nginx.conf" failed (2: No such file or directory)
执行: /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf https://www.cnblogs.com/codingcl ...
- java数组之二分法查找
认识: 猜字游戏 步数 所猜的数 结果 可能值的范围 0 1~100 1 50 太高 1~49 2 25 太低 26~49 3 37 太高 26~36 4 31 太低 32~36 5 34 太 ...
- eCharts.js使用心得
最近刚刚做了一个项目,需求是使用eCharts实现实时监控,可以动态的增加和删除数据,可以全屏展示,趁着现在还没忘干净,整理一下使用过程中出现的问题和经验.可能有分析的不到位的地方,不喜勿喷! 一.图 ...
- python——闰年的判断
写一个程序,判断给定年份是否为闰年. 这样定义闰年的:能被4整除但不能被100整除,或者能被400整除都是闰年. while(1): year = input("请输入一个年份,让我判断一下 ...
- 如何查询进程中占用CPU的线程
top -c 命令查找进程PID top -Hp PID 找进程中的线程号 echo %x 线程号 将线程转换成16进制 jstack PID |grep ...
- Eclipse字体修改
第一步: 第二步: 第三步: 第四步: 第五步: 第六步:
- html_outputer.py
coding=UTF-8 # HTML输出器 import sys class htmlOutputer(): def __init__(self): self.data = [] def colle ...
- TouTiao开源项目 分析笔记10 实现通用普通文章片段页面
1.RxJava的Observable数据操作符总结 1.1.Map操作符 Map操作符对原始Observable发射的没一项数据应用一个你选择的函数, 然后返回一个发射这些结果的Observable ...
- 4,Flask 中的 request
每个框架中都有处理请求的机制(request),但是每个框架的处理方式和机制是不同的 为了了解Flask的request中都有什么东西,首先我们要写一个前后端的交互 基于HTML + Flask 写一 ...