Solution -「CF 1372E」Omkar and Last Floor
\(\mathcal{Description}\)
Link.
给定一个 \(n \times m\) 的矩阵,每行被划分为若干段,你可以钦定每段中恰好一个位置为 \(1\),其余位置为 \(0\)。设 \(c_i\) 为第 \(i\) 列 \(1\) 的个数,最大化 \(\sum_{i=1}^{m} c_i^2\)。
\(n,m\le100\)。
\(\mathcal{Solution}\)
区间 DP,不过状态设计比较巧妙:令 \(f(l,r)\) 表示确定在 \([l,r]\) 区间内的所有段的最大和。记 \(c_{l,r,k}\) 表示在区间 \([l,r]\) 内,包含了第 \(k\) 列的段的个数,转移:
\]
复杂度 \(\mathcal O(n^4)\)(求转移时在线求 \(c_{l,r,k}\))。
\(\mathcal{Code}\)
/* Clearink */
#include <cstdio>
const int MAXN = 100;
int n, m, f[MAXN + 5][MAXN + 5], L[MAXN + 5][MAXN + 5], R[MAXN + 5][MAXN + 5];
inline void chkmax ( int& a, const int b ) { a < b ? a = b : 0; }
int main () {
scanf ( "%d %d", &n, &m );
for ( int i = 1, k; i <= n; ++ i ) {
scanf ( "%d", &k );
for ( int j = 1, l = 1, r; j <= k; ++ j, l = r + 1 ) {
scanf ( "%*d %d", &r );
for ( int h = l; h <= r; ++ h ) L[h][i] = l, R[h][i] = r;
}
}
for ( int len = 1; len <= m; ++ len ) {
for ( int l = 1, r; ( r = l + len - 1 ) <= m; ++ l ) {
int& cur = f[l][r] = -1;
for ( int k = l; k <= r; ++ k ) {
int c = 0;
for ( int h = 1; h <= n; ++ h ) c += l <= L[k][h] && R[k][h] <= r;
chkmax ( cur, f[l][k - 1] + f[k + 1][r] + c * c );
}
}
}
printf ( "%d\n", f[1][m] );
return 0;
}
Solution -「CF 1372E」Omkar and Last Floor的更多相关文章
- Solution -「CF 1392G」Omkar and Pies
\(\mathcal{Description}\) Link. 给定两个长度为 \(K\) 的 \(01\) 串 \(S,T\) 和 \(n\) 组操作 \((a_i,b_i)\),意义为交换 ...
- Solution -「CF 1342E」Placing Rooks
\(\mathcal{Description}\) Link. 在一个 \(n\times n\) 的国际象棋棋盘上摆 \(n\) 个车,求满足: 所有格子都可以被攻击到. 恰好存在 \(k\ ...
- Solution -「CF 1622F」Quadratic Set
\(\mathscr{Description}\) Link. 求 \(S\subseteq\{1,2,\dots,n\}\),使得 \(\prod_{i\in S}i\) 是完全平方数,并最 ...
- Solution -「CF 923F」Public Service
\(\mathscr{Description}\) Link. 给定两棵含 \(n\) 个结点的树 \(T_1=(V_1,E_1),T_2=(V_2,E_2)\),求一个双射 \(\varph ...
- Solution -「CF 923E」Perpetual Subtraction
\(\mathcal{Description}\) Link. 有一个整数 \(x\in[0,n]\),初始时以 \(p_i\) 的概率取值 \(i\).进行 \(m\) 轮变换,每次均匀随机 ...
- Solution -「CF 1586F」Defender of Childhood Dreams
\(\mathcal{Description}\) Link. 定义有向图 \(G=(V,E)\),\(|V|=n\),\(\lang u,v\rang \in E \Leftrightarr ...
- Solution -「CF 1237E」Balanced Binary Search Trees
\(\mathcal{Description}\) Link. 定义棵点权为 \(1\sim n\) 的二叉搜索树 \(T\) 是 好树,当且仅当: 除去最深的所有叶子后,\(T\) 是满的: ...
- Solution -「CF 623E」Transforming Sequence
题目 题意简述 link. 有一个 \(n\) 个元素的集合,你需要进行 \(m\) 次操作.每次操作选择集合的一个非空子集,要求该集合不是已选集合的并的子集.求操作的方案数,对 \(10^9 ...
- Solution -「CF 1023F」Mobile Phone Network
\(\mathcal{Description}\) Link. 有一个 \(n\) 个结点的图,并给定 \(m_1\) 条无向带权黑边,\(m_2\) 条无向无权白边.你需要为每条白边指定边权 ...
随机推荐
- KMP算法解题模板(更新)
/* kmp算法的主要作用在于对next数组的运用,所以这里只给出next数组的模板 性质1:对于每一个长度len的子串,该子串的最小循环节为len-next[len] 性质2:kmp的next不断向 ...
- 常用Cron表达式范例
描述 表达式 每隔5秒执行一次 */5 * * * * ? 每隔1分钟执行一次 0 */1 * * * ? 每天23点执行一次 0 0 23 * * ? 每天凌晨1点执行一次 0 0 1 * * ? ...
- LR12解决不能打开webTours服务问题
启动the webtours apache server时提示:设置使用服务器IP地址相关信息. 解决办法: 找到LR安装目录,如:D:\LoadRunner\WebTours\conf 找到http ...
- pycharm常用设置项和快捷键
python开发工具pycharm非常人性化,使用方便,功能强大,可以做到与项目配置库结合使用.初次使用,一些设置项和快捷键不那么容易被发现和设置,那么给大家下面总结pycharm常用的设置项和快捷键 ...
- leetcode 55. 跳跃游戏 及 45. 跳跃游戏 II
55. 跳跃游戏 问题描述 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个位置. 示例 1: 输入: [2,3,1, ...
- DataTable 中文国际化
DataTable中文设置,详见代码 1 var table = $('#example').DataTable({ 2 "language": { 3 "process ...
- Servlet-整个Servlet类的继承体系
- 数据库查询语句遇到:Unknown column 'XXXX' in 'where clause'解决方法
数据库查询语句遇到:Unknown colunm 'XXX' in 'where clause'解决方法 根本原因:可能是sql语句所用到的数据类型错误(int与String)弄错- 我的情况: 在网 ...
- linux字符编码防止乱码
一:linux字符编码 en_US.UTF-8 : 美式英文,utf-8 zh_CN.UTF-8 临时优化 export LANG=zh_CN.UTF-8 : 设置编码 永久优化 vim /etc/l ...
- lsof恢复误删文件
用 lsof 恢复 误删除文件实验: 先模拟一个进程: [tiger@root:/home/tiger]$ echo "hello deletede" >> test. ...