用f[i][j][k]表示第一行前i个数,第二行前j个数选k个子矩形的答案,考虑转移:
1.在第一行/第二行选择一个矩形
2.当i=j时,可以选择一个两行的矩形
注意要特判m=1的情况

 1 #include<bits/stdc++.h>
2 using namespace std;
3 int n,m,t,a[105][3],f[105][15],dp[105][105][15];
4 int main(){
5 scanf("%d%d%d",&n,&m,&t);
6 for(int i=1;i<=n;i++)
7 for(int j=1;j<=m;j++){
8 scanf("%d",&a[i][j]);
9 a[i][j]+=a[i-1][j];
10 }
11 if (m==1){
12 for(int i=1;i<=n;i++)
13 for(int j=1;j<=t;j++){
14 f[i][j]=f[i-1][j];
15 for(int k=0;k<i;k++)f[i][j]=max(f[i][j],f[k][j-1]+a[i][1]-a[k][1]);
16 }
17 printf("%d",f[n][t]);
18 return 0;
19 }
20 for(int i=1;i<=n;i++)
21 for(int j=1;j<=n;j++)
22 for(int k=1;k<=t;k++){
23 dp[i][j][k]=max(dp[i-1][j][k],dp[i][j-1][k]);
24 for(int l=0;l<i;l++)dp[i][j][k]=max(dp[i][j][k],dp[l][j][k-1]+a[i][1]-a[l][1]);
25 for(int l=0;l<j;l++)dp[i][j][k]=max(dp[i][j][k],dp[i][l][k-1]+a[j][2]-a[l][2]);
26 if (i==j)
27 for(int l=0;l<i;l++)
28 dp[i][j][k]=max(dp[i][j][k],dp[l][l][k-1]+a[i][1]-a[l][1]+a[i][2]-a[l][2]);
29 }
30 printf("%d",dp[n][n][t]);
31 }

最新文章

  1. Docker到底是什么?为什么它这么火!
  2. unity知识点思维导图
  3. css读书笔记1:HTML标记和文档结构
  4. Android 按键式事件
  5. Linux 查看物理内存
  6. Kafka 之 async producer (2) kafka.producer.async.DefaultEventHandler
  7. MATLAB【工具箱下载】汇总
  8. Web Service实例——天气预报
  9. python代码合并
  10. VS 文件自动定位功能
  11. java 之容器
  12. React从入门到放弃之前奏(1):webpack4简介
  13. 【NOIp2004提高组】食虫算 题解
  14. Vue.js环境配置
  15. Vue+elementUI开发中 Cannot read property &#39;resetFields&#39; of undefined 问题解决以及原因分析
  16. apache2.4 httpd.conf httpd-vhost.conf配置
  17. 秒懂 this(带你撸平this)
  18. mongodb文件损坏的恢复--无可恢复数据
  19. CSS如何进行图文并茂布局怎么破
  20. 快速排序之Java实现

热门文章

  1. java笔记(一直更新)
  2. SpringBoot入门08-整合Mabatis
  3. 双系统升win11(grub启动问题修复与讲解)?!?
  4. 秒级接入、效果满分的文档预览方案——COS文档预览
  5. Less-25 preg_replace2
  6. 指标统计:基于流计算 Oceanus(Flink) 实现实时 UVPV 统计
  7. [对对子队]会议记录4.20(Scrum Meeting11)
  8. [对对子队]会议记录5.14(Scrum Meeting1)
  9. [no_code][Alpha]发布声明报告
  10. WEB前端工程师如何做职业规划?