http://www.lydsy.com/JudgeOnline/problem.php?id=1084

m=1:

dp[i][j] 前i个数,选了j个矩阵的最大和

第i个不选:由dp[i-1][j]转移

第i个选:枚举i所在矩阵的左端点k,由dp[k][j-1]转移

m=2:

dp[i][j][k] 第1行前i个,第2行前j个,选了k个矩阵的最大和

2行都不选:dp[i-1][j-1][k]

只选第1行:枚举i所在矩阵的左端点h,由dp[h][j][k-1]转移

只选第2行:枚举j所在矩阵的左端点h,由dp[i][h][k-1]转移

如果i=j,2行都选:每局矩阵左端点h,由dp[h][h][k-1]转移

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm> using namespace std; #define N 101 int n,m,k; int sum[][N]; int DP[N][],dp[N][N][]; void read(int &x)
{
x=; int f=; char c=getchar();
while(!isdigit(c)) { if(c=='-') f=-; c=getchar(); }
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
x*=f;
} void init()
{
read(n); read(m); read(k);
for(int i=;i<=n;++i)
for(int j=;j<m;++j)
{
read(sum[j][i]);
sum[j][i]+=sum[j][i-];
}
} void DP_()
{
for(int i=;i<=n;++i)
for(int j=;j<=k;++j)
{
DP[i][j]=DP[i-][j];
for(int h=;h<i;++h) DP[i][j]=max(DP[i][j],DP[h][j-]+sum[][i]-sum[][h]);
}
cout<<DP[n][k];
} void dp_()
{
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
for(int h=;h<=k;++h)
{
dp[i][j][h]=max(dp[i-][j][h],dp[i][j-][h]);
for(int l=;l<i;++l) dp[i][j][h]=max(dp[i][j][h],dp[l][j][h-]+sum[][i]-sum[][l]);
for(int l=;l<j;++l) dp[i][j][h]=max(dp[i][j][h],dp[i][l][h-]+sum[][j]-sum[][l]);
if(i==j)
for(int l=;l<i;++l) dp[i][j][h]=max(dp[i][j][h],dp[l][l][h-]+sum[][i]-sum[][l]+sum[][j]-sum[][l]);
}
cout<<dp[n][n][k];
} int main()
{
init();
if(m==) DP_();
else dp_();
}

1084: [SCOI2005]最大子矩阵

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 3296  Solved: 1641
[Submit][Status][Discuss]

Description

  这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大。注意:选出的k个子矩阵
不能相互重叠。

Input

  第一行为n,m,k(1≤n≤100,1≤m≤2,1≤k≤10),接下来n行描述矩阵每行中的每个元素的分值(每个元素的
分值的绝对值不超过32767)。

Output

  只有一行为k个子矩阵分值之和最大为多少。

Sample Input

3 2 2
1 -3
2 3
-2 3

Sample Output

9

最新文章

  1. UVA-146 ID Codes
  2. super用法和继承中的构造方法
  3. GPT分区基础知识
  4. 关于xampp使用不同端口的虚拟机
  5. Codeforces Round #349 (Div. 2) D. World Tour (最短路)
  6. iOS开发——网络编程Swift篇&amp;(五)同步Post方式
  7. 开发H5小游戏
  8. 习惯使用断言Assert
  9. RADOS工作原理
  10. SB中使用Autolayout设置到父视图的间距为0
  11. 关于 this对象 指向问题
  12. LeetCode 226. Invert Binary Tree (反转二叉树)
  13. Web Api 过滤器之 AuthorizationFilter 验证过滤器
  14. 分布式缓存GemFire架构介绍
  15. CSRFGuard工具介绍
  16. Nmap的详细使用
  17. TreeMap - 源代码学习笔记
  18. plsql 用法和技巧
  19. ajax Post数据,并得到返回结果,密码加密(Select,checkbox)
  20. prometheus报警消息钉钉通知

热门文章

  1. Asp.Net_Mvc3.5语法_&lt;%%&gt;的用法
  2. 金蝶盘点机PDA条码数据采集器WMS系统具体有哪些功能
  3. ag使用需要注意的问题
  4. 第二阶段冲刺——five
  5. MVC 如何设定默认默认路由为指定的Area下的某个action(笔记)
  6. 从零开始学Kotlin-操作符(3)
  7. [windows]转帖 windows 版本的含义
  8. [国家集训队]middle
  9. 【设计模式】—— 外观模式Facade
  10. bzoj 4631: 踩气球 线段树合并