51Nod 1021 石子归并(区间dp经典入门)
题意:
n<=100
思路:
dp[i][j]表示以i开头,长度为j的石子合并的答案
dp[i][j] = min(dp[i][k] + dp[i+k][j-k], dp[i][j] + sum(i,i+j-1));
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<stack>
#include<queue>
#include<deque>
#include<set>
#include<vector>
#include<map>
#include<functional>
#include<list> #define fst first
#define sc second
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a))
#define lson l,mid,root<<1
#define rson mid+1,r,root<<1|1
#define lc root<<1
#define rc root<<1|1
#define lowbit(x) ((x)&(-x)) using namespace std; typedef double db;
typedef long double ldb;
typedef long long ll;
typedef long long LL;
typedef unsigned long long ull;
typedef pair<int,int> PI;
typedef pair<ll,ll> PLL; const db eps = 1e-;
const int mod = 1e9+;
const int maxn = 2e6+;
const int maxm = 2e6+;
const int inf = 0x3f3f3f3f;
//const db pi = acos(-1.0);
const int N = maxn; int n;
int dp[][];
int a[maxn];
int s[maxn];
int main(){
int n;
scanf("%d", &n);
mem(dp,inf);
for(int i = ; i <= n; i++){
scanf("%d", &a[i]);
dp[i][] = ;
s[i] = s[i-]+a[i];
}
for(int j = ; j <= n; j++){
for(int i = ; i+j- <= n; i++){
for(int k = ; k < j; k++){
dp[i][j] = min(dp[i][j], dp[i][k] + dp[i+k][j-k]+s[i+j-]-s[i-]);
}
//printf("%d %d %d\n",i,j,dp[i][j]);
}
}
printf("%d",dp[][n]);
return ;
} /*`
10
59 -17 5 67 87 50 -71 54 27 -10
*/
51Nod 1021 石子归并(区间dp经典入门)的更多相关文章
- 51nod 1021 石子归并 区间DP
1021 石子归并 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 取消关注 N堆石子摆成一条线.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆 ...
- 51nod 1021 石子归并 - 区间dp(经典)
题目地址:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1021 经典区间dp,dp[i][j] 表示将从 i 到 j 堆 ...
- 51nod 1021 石子归并(dp)
51nod 1021 石子归并 题解:从i到j合并的最小值:dp[i][j] = min(dp[i][j], dp[i][k] + dp[k+1][j] + sum[j] - sum[i-1]); 最 ...
- 51nod 1021 石子归并 【区间DP】
1021 石子归并 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 N堆石子摆成一条线.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子 ...
- [nyoj737]石子归并(区间dp入门题)
题意:有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为一堆.求出总的代价最小值 ...
- 51nod 1022 石子归并 V2 —— DP四边形不等式优化
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1022 1022 石子归并 V2 基准时间限制:1 秒 空间限 ...
- [51nod 1022] 石子归并v2 [dp+四边形不等式优化]
题面: 传送门 思路: 加强版的石子归并,现在朴素的区间dp无法解决问题了 首先我们破环成链,复制一条一样的链并粘贴到原来的链后面,变成一个2n长度的序列,在它上面dp,效率O(8n^3) 显然是过不 ...
- 51nod 1021 石子归并
区间dp 递推比递归的常数要小 所以还是尽量学会递推吧 看题解 各种恶心啊 有木有 还是视频讲的直接呃 不过就是讲的有点儿慢 链接:https://www.bilibili.com/vide ...
- 51nod 1021 石子归并 (动态规划 简单代码)
题目: 思路:动态规划,递推式子 dp[i][j] = min(dp[i][j], dp[i][k] + dp[k+1][j] + sum[j] - sum[i-1]); dp[i][j]表示 ...
随机推荐
- docker仓库和dockerfile
通过Dockerfile创建镜像 Dockerfile • Dockerfile语法格式 – FROM:基础镜像 – MAINTAINER:镜像创建者信息 – COPY:复制文件到镜像(所有文 ...
- bootstrap4.4 Stretched link的使用
Stretched link功能介绍:扩大可点击区域. 原理 .stretched-link::after { position: absolute; top: 0; right:0; bottom: ...
- Bandicam(班迪录屏)高清视频录制工具
Bandicam(班迪录屏)简单好用的录屏幕,录游戏,录视频的功能强大的屏幕录像软件,比起其他软件其性能更加卓越. 与其他软件相比,用Bandicam录制的视频大小更小, 不仅保证原文件的质量.
- 【LC_Lesson3】---回文数的判别
判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向 ...
- 双重 hash
#include<stdio.h> #include<map> #include<queue> #include<algorithm> using na ...
- 解决.net core读取appSetting.json文件中文字符乱码
如上所诉 vs菜单栏中 :工具 =>自定义 => 命令 =>添加命令 =>文件 =>找到高级保存选项点击 然后关闭,这时在visual studio界面就会有高级保存选 ...
- 用K-Means聚类分析做客户分群
聚类指的是把集合,分组成多个类,每个类中的对象都是彼此相似的.K-means是聚类中最常用的方法之一,它是基于点与点距离的相似度来计算最佳类别归属. 在使用该方法前,要注意(1)对数据异常值的处理:( ...
- C# 自动批量搜索指定关键字,没有注册的域名
做好网站了,部署上线.想注册域名,但是想了很多要注册的,都被别人注册了.例如已经做好了体育资讯的网站,想要包含关键字sport的域名,就可以用这个工具自动完成搜索. 效果如下图: 演示程序结构 在vs ...
- 图解 Kubernetes
容器 在了解 Kubernetes 之前,让我们先了解一个容器. 因为如果不了解容器就没法聊容器编排. 容器就是...一个你塞入所有材料的容器. "材料"是指你的应用代码.依赖库, ...
- 学习 lind api 十月 第一弹
step one 我们来看一下代码的结构