考虑DP

f[i][j][k]表示一行到i一行到j共取k块最大值,类似于最长公共子序列n^2那种

注意相等时可以一起拿

By:大奕哥

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,m,K,g[105][105][15],f[105][105],s[105][105],x;
 4 int main()
 5 {
 6     scanf("%d%d%d",&n,&m,&K);
 7     for(int i=1;i<=n;++i)
 8     for(int j=1;j<=m;++j)
 9     {
10         scanf("%d",&x);
11         s[i][j]=s[i-1][j]+x;
12     }
13     if(m==1)
14     {
15         memset(f,-0x3f,sizeof(f));
16         for(int i=1;i<=n;++i)f[i][0]=0;
17         for(int i=1;i<=n;++i)
18         {
19             for(int k=1;k<=K;++k)
20             {
21                 f[i][k]=max(f[i][k],f[i-1][k]);
22                 for(int j=0;j<i;++j)
23                 f[i][k]=max(f[i][k],f[j][k-1]+s[i][1]-s[j][1]);
24             }
25         }
26         printf("%d\n",f[n][K]);
27     }
28     else
29     {
30         memset(g,-0x3f,sizeof(g));
31         for(int i=1;i<=n;++i)
32         for(int j=1;j<=n;++j)
33         g[i][j][0]=0;
34         for(int i=1;i<=n;++i)
35         for(int j=1;j<=n;++j)
36         {
37             for(int k=1;k<=K;++k)
38             {
39                 g[i][j][k]=max(g[i-1][j][k],g[i][j-1][k]);
40                 for(int p=0;p<i;++p)g[i][j][k]=max(g[i][j][k],g[p][j][k-1]+s[i][1]-s[p][1]);
41                 for(int p=0;p<j;++p)g[i][j][k]=max(g[i][j][k],g[i][p][k-1]+s[j][2]-s[p][2]);
42                 if(i==j)
43                 for(int p=0;p<i;++p)
44                 g[i][j][k]=max(g[i][j][k],g[p][p][k-1]+s[i][1]+s[i][2]-s[p][1]-s[p][2]);
45             }
46         }
47         printf("%d\n",g[n][n][K]);
48     }
49     return 0;
50 }

转载于:https://www.cnblogs.com/nbwzyzngyl/p/8361409.html

BZOJ1084 SCOI2005最大子矩阵相关推荐

  1. BZOJ1084 [SCOI2005]最大子矩阵 动态规划

    欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1084 题意概括 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注 ...

  2. bzoj1084: [SCOI2005]最大子矩阵

    dp.转移方程在代码里.. 转载于:https://www.cnblogs.com/invoid/p/5451202.html

  3. bzoj1084 [SCOI2005]最大子矩阵 dp

    首先题目是要选几个连续的矩阵,有关连续类的问题是可以最优值直接在相邻两行转移的 而且题目中m<=2是非常方便的条件,分类讨论就可以了 注: 0 0也要转移 码: #include<iost ...

  4. BZOJ 1084: [SCOI2005]最大子矩阵【DP】

    1084: [SCOI2005]最大子矩阵 Time Limit: 10 Sec Memory Limit: 162 MB Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得 ...

  5. P2331 [SCOI2005]最大子矩阵 题解

    DP 题,好像有点恶心,主要是因为能不能选空矩阵的问题. 有些数据好像是可以选空矩阵的有些又不能选,就很离谱,但是根据原数据来看空矩阵应该是不能选的,我也不知道具体情况() 注意到 m=1m=1m=1 ...

  6. [T][3]洛谷 P2331 [SCOI2005] 最大子矩阵

    题目描述 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. 输入输出格式 输入格式: 第一行为n,m,k(1≤n≤100,1≤m≤2 ...

  7. 洛谷 P2331 [SCOI2005]最大子矩阵

    PS:如果读过题了可以跳过题目描述直接到题解部分 提交链接:洛谷 P2331 [SCOI2005]最大子矩阵 题目 题目描述 这里有一个 n*m 的矩阵,请你选出其中 k 个子矩阵,使得这个 k 个子 ...

  8. P2331 [SCOI2005]最大子矩阵(DP分类讨论)

    P2331 [SCOI2005]最大子矩阵(DP&分类讨论) 考虑dp解决. 若m=1m=1m=1则是一个简单的递推. 若m=2m=2m=2则是分情况讨论. 一个是当前行不取. 一个是选第一列 ...

  9. BZOJ1084洛谷P2331 [SCOI2005]最大子矩阵

    DP+思维 思路 这道题的切入点是mmm,发现mmm只有两种取值,那么我们就可以尝试对mmm分类讨论 m=1 发现在m=1m=1m=1时就是在一个一维序列上做k个最大子段和,我们定义f[i][j]f[ ...

最新文章

  1. java语言程序设计期末复习综合练习题_Java语言程序设计期末复习综合练习题答案...
  2. 如果孩子想学编程,你会推荐哪个? | 每日趣闻
  3. Oracle SQL Optimizer IN VS Exists Again
  4. os_mem.c(全)
  5. 如何理解指向指针的指针?
  6. MySQL 联合索引测试2
  7. 最大连续子数组和求解问题
  8. 3 个 Zabbix常见问题的处理方法
  9. 【数据库课程设计】金融数据库设计与实现
  10. k8s部署应用nginx
  11. 回顾2020年(1)
  12. A星寻路 A星算法优化
  13. python正则取反,一文搞定Python正则表达式
  14. 转载:js技巧收集(200多个)
  15. 功能对等四个原则_“功能对等”翻译理论--------奈达翻译理论体系的核心
  16. ssssssssss
  17. 括号匹配问题(数据结构)
  18. Qt扫盲- QTcpSocket 理论总结
  19. New eBooks Available for Subscribers
  20. iOS15.2 注册相册变化通知未给相册权限导致崩溃 [PHPhotoLibrary.sharedPhotoLibrary registerChangeObserver:self]

热门文章

  1. AtCoder Grand Contest 002 (AGC002) F - Leftmost Ball 动态规划 排列组合
  2. 4-20模块 序列化模块 hashlib模块
  3. WPF MVVM模式下的无阻塞刷新
  4. React入门---事件与数据的双向绑定-9
  5. lt;二gt;读lt;lt;大话设计模式gt;gt;之策略模式
  6. Java学习笔记之:Java JDBC
  7. 真正理解、区分Action,Service和Dao功能
  8. Java 输入 输出
  9. leetcode算法题--数组中出现次数超过一半的数字
  10. 20165303实验一 Java开发环境的熟悉