#区间dp,离散#D 弱者对决
分析
设\(dp[i][j][x]\)表示当前区间为\([i,j]\),最小值为\(x\)的最大总分,
状态转移方程可以用后缀最大值优化到\(O(n^3m)\),主要难点是输出方案
后缀最大值需要记录是在哪个位置取得最大值
代码
#include <cstdio>
#include <cctype>
#include <algorithm>
#define rr register
using namespace std;
const int N = 4011, M = 61;
int n, m, tot, c[N], a[N], b[N], L[N], R[N];
int dp[M][M][N], f[M][M][N], p[M][M][N], pf[M][M][N];
inline signed iut() {
rr int ans = 0;
rr char c = getchar();
while (!isdigit(c)) c = getchar();
while (isdigit(c)) ans = (ans << 3) + (ans << 1) + (c ^ 48), c = getchar();
return ans;
}
inline void print(int ans) {
if (ans > 9)
print(ans / 10);
putchar(ans % 10 + 48);
}
inline void calc(int l, int mid, int r) {
for (rr int i = 1; i <= tot; ++i) c[i] = 0;
for (rr int i = 1; i <= m; ++i)
if (l <= L[i] && L[i] <= mid && mid <= R[i] && R[i] <= r)
++c[a[i]];
}
inline void dfs(int l, int r, int now) {
rr int mid = p[l][r][now];
if (l < mid)
dfs(l, mid - 1, pf[l][mid - 1][now]);
printf("%d ", b[now]);
if (mid < r)
dfs(mid + 1, r, pf[mid + 1][r][now]);
}
signed main() {
freopen("baddream.in", "r", stdin);
freopen("baddream.out", "w", stdout);
n = iut(), m = iut();
for (rr int i = 1; i <= m; ++i) L[i] = iut(), R[i] = iut(), b[i] = a[i] = iut();
sort(b + 1, b + 1 + m), tot = unique(b + 1, b + 1 + m) - b - 1;
for (rr int i = 1; i <= m; ++i) a[i] = lower_bound(b + 1, b + 1 + tot, a[i]) - b;
for (rr int i = n; i >= 1; --i)
for (rr int j = i; j <= n; ++j) {
for (rr int k = i; k <= j; ++k) {
calc(i, k, j);
for (rr int o = tot, sum = 0; o; --o) {
sum += c[o];
rr int now = dp[i][k - 1][o] + dp[k + 1][j][o] + sum * b[o];
if (now >= f[i][j][o])
f[i][j][o] = now, p[i][j][o] = k;
}
}
for (rr int o = tot; o; --o)
if (f[i][j][o] >= dp[i][j][o + 1])
dp[i][j][o] = f[i][j][o], pf[i][j][o] = o;
else
dp[i][j][o] = dp[i][j][o + 1], pf[i][j][o] = pf[i][j][o + 1];
}
printf("%d\n", dp[1][n][1]);
dfs(1, n, pf[1][n][1]);
return 0;
}
#区间dp,离散#D 弱者对决的更多相关文章
- [BZOJ 1032][JSOI 2007]祖玛 题解(区间DP)
[BZOJ 1032][JSOI 2007]祖玛 Description https://www.lydsy.com/JudgeOnline/problem.php?id=1032 Solution ...
- [JSOI2007] 祖玛 (区间DP)
题目描述 这是一个流行在Jsoi的游戏,名称为祖玛. 精致细腻的背景,外加神秘的印加音乐衬托,彷佛置身在古老的国度里面,进行一个神秘的游戏——这就是著名的祖玛游戏.祖玛游戏的主角是一只石青蛙,石青蛙会 ...
- 区间dp专题练习
区间dp专题练习 题意 1.Equal Sum Partitions ? 这嘛东西,\(n^2\)自己写去 \[\ \] \[\ \] 2.You Are the One 感觉自己智力被吊打 \(dp ...
- [USACO2005 nov] Grazing on the Run【区间Dp】
Online Judge:bzoj1742,bzoj1694 Label:区间Dp 题目描述 John养了一只叫Joseph的奶牛.一次她去放牛,来到一个非常长的一片地,上面有N块地方长了茂盛的草.我 ...
- 浙工大新生赛莫队处理+区间DP+KMP+分析题
题目描述 读入一个长度为n的整数数列a1,a2,…,an,以及一个整数K. q组询问. 每组询问包含一个二元组(l, r), 其中1≤l≤r≤ n, 求所有满足以下条件的二元组(l2, r2)的数目: ...
- 【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 ...
随机推荐
- 学习go语言编程之流程控制
Golang支持如下4种流程控制语句: 条件语句:if,else和else if 选择语句:switch,case和select 循环语句:for,range 跳转语句:goto 条件语句 示例代码: ...
- 简化Simulink的建模与模型重构
简化Simulink的建模与模型重构 模型重构 Simulink作为汽车和自动化领域中经典的模型工程必备工具,不管是专业的汽车控制器的开发还是自动化控制的专业应用编程,都会使用到Simulink进行图 ...
- iOS的Runtime知识点繁杂难啃,真的理解它的思想,你就豁然开朗了
一.Runtime 1.概念: 概念:Runtime是Objective-c语言动态的核心,即运行时.在面向对象的基础上增加了动态运行,达到很多在编译时确定方法推迟到了运行时,从而达到动态修改.确定. ...
- 【Azure Developer】示例: 在中国区调用MSGraph SDK通过User principal name获取到User信息,如Object ID
问题描述 示例调用MSGraph SDK通过User principal name获取到User信息,如Object ID. 参考资料 选择 Microsoft Graph 身份验证提供程序 : ht ...
- 【Azure 应用服务】Function App / App Service 连接 Blob 报错
问题描述 因 Blob 启用了防火墙功能,但是当把App Service 或 Function App的出站IP地址都加入到Blob的白名单中,为什么访问还是403错误呢? 问题解答 Azure St ...
- GenAI助力DevOps,塑造软件工程的未来
自 2022 年以来,GenAI 无疑已成为一种普遍的技术趋势.在本文中,我们将探索 DevOps 中令人兴奋的 GenAI 领域,讨论其潜在优势.局限性.新兴趋势和最佳实践,深入了解 AI 支持的 ...
- Hugo 建站经验之谈
前言 建站工具,早已不是一个新颖的话题,抛开可视化建站单论开发层面,各类语言都有推出广受欢迎的建站框架,比如 Python 开发的 Pelican,JavaScript 开发的 Hexo,以及市场份额 ...
- python爬虫中文转成一个字符串类型的unicode字符串(%u)的问题
本文主要介绍某些爬虫在遇到%u627E%u4E0A%u95E8这种类似unicode编码的str类型数据时,无法直接使用decode('unicode-escape')方法来转成中文时的一个转码的解决 ...
- 快速排序遇到的小bug
测试环境 Ubuntu 18.04, gcc 8.4 复习一下快排算法,不料却得到了非预期的结果.示例代码如下 1 #include <stdio.h> 2 3 void mySwap( ...
- 【Oracle】Oracle表空间数据文件大小设置
Oracle数据文件默认大小上限是32G,如果要数据文件大于32G,需要在数据库创建之初就设置好. 表空间数据文件容量与DB_BLOCK_SIZE有关,在初始建库时,DB_BLOCK_SIZE要根据实 ...