SCP-bzoj-1084
项目编号:bzoj-1084
项目等级:Safe
项目描述:
特殊收容措施:
分类讨论+DP。
#滑稽
预处理前缀和s[i][s]=Σa[j][s](∀j∈[1,i])(m=1时略去第二维)
对于m=1,设计状态f[i][j]表示前i列中已选取j个矩形的最大分值。转移方程f[i][j]=max(f[i-1][j-1],max{f[k][j-1]+s[i]-s[k-1]})。
对于m=2,设计状态f[i][j][k]表示第一行前i列中、第二行前j列中已选取k个矩形的最大分值。有三种转移方式:
•传递性转移:max(f[i-1][j][k],f[i][j-1][k])->f[i][j][k]
•单行转移:max(max{f[x][j][k-1]+s[i][0]-s[x-1][0]},max{f[i][x][k]+s[j][1]-s[x-1][1]})->f[i][j][k]
•双行转移(前提:i=j):max{f[x][x][k-1]+s[i][0]-s[x-1][0]+s[j][1]-s[x-1][1]}->f[i][j][k]
复杂度O(n4)。
附录:
#include <bits/stdc++.h>
#define range(i,c,o) for(register int i=(c);i<(o);++i)
#define dange(i,c,o) for(register int i=(c);i>(o);--i)
using namespace std; //#define __debug
#ifdef __debug
#define def(t) t
#else
#define def(t) __attribute__((optimize("-O2"))) inline t
#endif // quick_io BEGIN HERE
def(int) getI()
{
char c=getchar(); int r=; short s=;
for(;!isdigit(c)&&c!='-';c=getchar());
for(;c=='-';c=getchar()) s*=-;
for(;isdigit(c);c=getchar()) r=(r<<)+(r<<)+c-'';
return s*r;
}
// quick_io END HERE static int N=getI(),M=getI(),K=getI();
int s[][],a[][],f[][][];
def(int) solve1()
{
range(i,,N+) s[i][]=s[i-][]+a[i][];
bool cur=;
range(k,,K)
{
cur^=;
range(i,,N+)
{
f[i][][cur]=f[i-][][cur];
range(j,,i) f[i][][cur]=max(
f[i][][cur],
f[j][][cur^]+s[i][]-s[j][]
);
}
}
return f[N][][cur];
}
def(int) solve2()
{
range(i,,N+) range(j,,) s[i][j]=s[i-][j]+a[i][j];
bool cur=;
range(k,,K)
{
cur^=;
range(i,,N+) range(j,,N+)
{
f[i][j][cur]=max(f[i-][j][cur],f[i][j-][cur]);
range(x,,i) f[i][j][cur]=max(
f[i][j][cur],f[x][j][cur^]+s[i][]-s[x][]
);
range(x,,j) f[i][j][cur]=max(
f[i][j][cur],f[i][x][cur^]+s[j][]-s[x][]
);
if(i==j) range(x,,i) f[i][j][cur]=max(
f[i][j][cur],
f[x][x][cur^]+s[i][]-s[x][]+s[j][]-s[x][]
);
}
}
return f[N][N][cur];
} int main()
{
range(i,,N+) range(j,,M) a[i][j]=getI();
return printf("%d\n",M&?solve1():solve2()),;
}
SCP-bzoj-1084的更多相关文章
- 【SCOI2005】 最大子矩阵 BZOJ 1084
Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. Input 第一行为n,m,k(1≤n≤100,1≤m≤2 ...
- [BZOJ 1084] [SCOI2005] 最大子矩阵 【DP】
题目链接:BZOJ - 1084 题目分析 我看的是神犇BLADEVIL的题解. 1)对于 m = 1 的情况, 首先可能不取 Map[i][1],先 f[i][k] = f[i - 1][k]; ...
- BZOJ 1084: [SCOI2005]最大子矩阵 DP
1084: [SCOI2005]最大子矩阵 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1084 Description 这里有一个n* ...
- BZOJ 1084 最大子矩阵
http://www.lydsy.com/JudgeOnline/problem.php?id=1084 思路:分m=1和m=2操作 #include<algorithm> #includ ...
- BZOJ 1084 最大子矩阵 dp
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1084 题目大意: 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分 ...
- bzoj 1084 DP
首先对于m==1的情况非常容易处理(其实这儿因为边界我错了好久...),直接DP就好了,设f[i][k]为这个矩阵前i个选k个矩阵的最大和,那么f[i][k]=max(f[j][k-1]+sum[j+ ...
- 【BZOJ 1084】 1084: [SCOI2005]最大子矩阵 (DP)
1084: [SCOI2005]最大子矩阵 Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. Input 第 ...
- 【BZOJ 1084】 [SCOI2005]最大子矩阵(DP)
题链 http://www.lydsy.com/JudgeOnline/problem.php?id=1084 Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩 ...
- BZOJ 1084 (SCOI 2005) 最大子矩阵
1084: [SCOI2005]最大子矩阵 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 3560 Solved: 1779 [Submit][Sta ...
- BZOJ: 1084: [SCOI2005]最大子矩阵
NICE 的DP 题,明白了题解真是不错. Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1228 Solved: 622[Submit][Stat ...
随机推荐
- ES6中类Class的super关键字
super 关键字,既可以当作函数使用,也可以当作对象使用.在这两种情况下,它的用法完全不同. 1.super当做函数使用 super 作为函数调用时,代表父类的构造函数.ES6 要求,子类的构造函数 ...
- cf 811c Vladik and Memorable Trip
原题链接:http://codeforces.com/contest/811/problem/C 题意:将数组中的连续数字连成若干个“线段”(或者不连),其实就是区间.区间必须满足对于其中的任意数字, ...
- C#后台获取post参数
public static string GetQueryString(string key) { if (HttpContext.Current.Request[key] == null) retu ...
- window server 2008 r2 安装ftp
一.安装ftp服务 1.在服务管理器“角色”右键单击“添加角色”. 2.下一步. 3.勾选“Web 服务器(IIS)”,下一步. 4.勾选“FTP 服务器”,下一步. 5.安装完成,点击“关闭”. ...
- [CSP-S模拟测试]:God Knows(线段树维护单调栈)
题目描述 小$w$来到天堂的门口,对着天堂的大门发呆.大门上有一个二分图,左边第$i$个点连到右边第$p_i$个点.(保证$p_i$是一个排列).小$w$每次可以找左边某个对应连线尚未被移除的点$i$ ...
- 关于设置shadowPath的重要性
这是超级容易添加阴影到iOS中的任何视图.所有您需要做的是 添加QuartzCore框架到项目中(如果不存在的话) 导入QuartzCore到您的执行文件 添加一行如[myView.layer set ...
- python中的单例模式及其实现
单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在. 当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. 比如, ...
- jmeter添加自定义扩展函数之大写转换小写
1,打开eclipse,新建maven工程,在pom中引用jmeter核心jar包,具体请看---https://www.cnblogs.com/guanyf/p/10863033.html---,这 ...
- vue filters 金额转中文大写
capitalAmount(amount: any) { // 汉字的数字 const cnNums = ["零", "壹 ...
- 面试题30:包含min函数的栈
思路: 1.首先将栈的基本结构写出 #初始化栈的写法 def __init__(self): self.stack = [] #栈的压入 (加self是实例化,如果前面加入静态装饰器啥的,就不需要 ...