71: libreoj #10151 区间dp
$des$
$sol$
区间dp
$f_{i, j}$ 表示区间 $[l, r]$ 合并的最大值
枚举中间点 $k$
$f_{i, j} =max(f_{i, j}, f_{i, k} + f_{k + 1, j} + (w_r + w_{l - 1}) \times w_k)$
对于方案的输出,$g_{i, j}$ 表示区间最优断点
bfs输出
#include <bits/stdc++.h> const int N = ; int f[N][N], g[N][N], w[N], n, sum[N]; int main() {
std:: cin >> n;
for(int i = ; i <= n; i ++) std:: cin >> w[i];
for(int i = ; i <= n; i ++) sum[i] = sum[i - ] + w[i];
for(int i = ; i <= n; i ++)
for(int j = ; j <= n; j ++)
f[i][j] = ( << );
for(int i = ; i <= n; i ++) f[i][i] = ;
for(int len = ; len <= n; len ++) {
for(int l = ; l + len - <= n; l ++) {
int r = l + len - , add = -;
for(int k = l; k < r; k ++) {
int now = f[l][k] + f[k + ][r] + (w[r] + w[l]) * w[k];
if(now > add) {
add = now, g[l][r] = k;
}
}
f[l][r] = add;
}
}
std:: cout << f[][n] << "\n";
static int Answer[N], js = ;
std:: queue < std:: pair<int, int> > Q;
Q.push(std:: make_pair(, n));
while(!Q.empty()) {
std:: pair <int, int> tp = Q.front();
Q.pop();
Answer[++ js] = g[tp.first][tp.second];
if(tp.first != g[tp.first][tp.second]) Q.push(std:: make_pair(tp.first, g[tp.first][tp.second]));
if(tp.second != g[tp.first][tp.second] + ) Q.push(std:: make_pair(g[tp.first][tp.second] + , tp.second));
}
for(int i = ; i <= js; i ++) std:: cout << Answer[i] << " ";
return ;
}
71: libreoj #10151 区间dp的更多相关文章
- 72: libreoj #10147 区间dp
$des$ 将 n 堆石子绕圆形操场排放,现要将石子有序地合并成一堆.规定每次只能选相邻的两堆合并成新的一堆,并将新的一堆的石子数记做该次合并的得分. 请编写一个程序,读入堆数 nnn 及每堆的石子数 ...
- 70: libreoj #2424 区间dp
$des$ $sol$ $f_{i, j, k} => a => [1, i], b => [1, j], a_i = b_j | a_i != b_j , a_i => 0 ...
- 【BZOJ-4380】Myjnie 区间DP
4380: [POI2015]Myjnie Time Limit: 40 Sec Memory Limit: 256 MBSec Special JudgeSubmit: 162 Solved: ...
- 【POJ-1390】Blocks 区间DP
Blocks Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 5252 Accepted: 2165 Descriptio ...
- 区间DP LightOJ 1422 Halloween Costumes
http://lightoj.com/volume_showproblem.php?problem=1422 做的第一道区间DP的题目,试水. 参考解题报告: http://www.cnblogs.c ...
- BZOJ1055: [HAOI2008]玩具取名[区间DP]
1055: [HAOI2008]玩具取名 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1588 Solved: 925[Submit][Statu ...
- poj2955 Brackets (区间dp)
题目链接:http://poj.org/problem?id=2955 题意:给定字符串 求括号匹配最多时的子串长度. 区间dp,状态转移方程: dp[i][j]=max ( dp[i][j] , 2 ...
- HDU5900 QSC and Master(区间DP + 最小费用最大流)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5900 Description Every school has some legends, ...
- BZOJ 1260&UVa 4394 区间DP
题意: 给一段字符串成段染色,问染成目标串最少次数. SOL: 区间DP... DP[i][j]表示从i染到j最小代价 转移:dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k ...
随机推荐
- Map 集合按字母排序方法
@Testpublic void testMapSort() { Map<String, String> map = new HashMap<>(); map.put(&quo ...
- 将 C++/WinRT 中的线程切换体验带到 C# 中来(WPF 版本)
原文:将 C++/WinRT 中的线程切换体验带到 C# 中来(WPF 版本) 如果你要在 WPF 程序中使用线程池完成一个特殊的任务,那么使用 .NET 的 API Task.Run 并传入一个 L ...
- jQuery中的几个案例:隔行变色、复选框全选和全不选
1 表格隔行变色 1 技术分析: 1 )基本过滤选择器: odd: even: 2 )jq添加和移除样式: addClass(); removeClass(); 2 代码实现 <script s ...
- 测度(Measure)
测度概述 数学上,测度(Measure)是一个函数,它对一个给定集合的某些子集指定一个数,这个数可以比作大小.体积.概率等等.传统的积分是在区间上进行的,后来人们希望把积分推广到任意的集合上,就发展出 ...
- Deployment.spec.selector.matchLables实验解释
原文:https://cloud.tencent.com/developer/article/1394657 Deployment.spec.selector.matchLables实验解释 作者: ...
- 遍历js对象中的属性
可以使用js自带的for in.也可以使用Ext JS中的方法来遍历js对象中的属性 代码如下: /** 遍历对象 */ var person = {name:'张泰松',age:28}; //js方 ...
- 十二、vue中watch原理
1.普通的watch 2.对象属性的watch: 对象和数组都是引用类型,引用类型变量存的是地址,地址没有变,所以不会触发watch.这时我们需要进行深度监听,就需要加上一个属性 deep,值为 ...
- JavaWeb 之 Filter:过滤器
一.Filter 概述 1.概念 web 中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能. 2.作用 一般用于完成通用的操作.如:登录验证.统一编码处理.敏感字符等功能 ...
- LCD 驱动 S3C2440A
LCD Control 1 Register 以16BPP为例 LCD Control 2 Register LCD Control 3 Register LCD Control 4 Register ...
- Android为TV端助力之:maxWidth设置无效
android:maxWidth用过几次,之前有效,今天再用就无效了.其实是有两个注意点的,记录下: 1. android:adjustViewBounds="true" 2.an ...