[bzoj1084]最大子矩阵
2024-09-05 22:09:03
用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 }
最新文章
- Docker到底是什么?为什么它这么火!
- unity知识点思维导图
- css读书笔记1:HTML标记和文档结构
- Android 按键式事件
- Linux 查看物理内存
- Kafka 之 async producer (2) kafka.producer.async.DefaultEventHandler
- MATLAB【工具箱下载】汇总
- Web Service实例——天气预报
- python代码合并
- VS 文件自动定位功能
- java 之容器
- React从入门到放弃之前奏(1):webpack4简介
- 【NOIp2004提高组】食虫算 题解
- Vue.js环境配置
- Vue+elementUI开发中 Cannot read property &#39;resetFields&#39; of undefined 问题解决以及原因分析
- apache2.4 httpd.conf httpd-vhost.conf配置
- 秒懂 this(带你撸平this)
- mongodb文件损坏的恢复--无可恢复数据
- CSS如何进行图文并茂布局怎么破
- 快速排序之Java实现
热门文章
- java笔记(一直更新)
- SpringBoot入门08-整合Mabatis
- 双系统升win11(grub启动问题修复与讲解)?!?
- 秒级接入、效果满分的文档预览方案——COS文档预览
- Less-25 preg_replace2
- 指标统计:基于流计算 Oceanus(Flink) 实现实时 UVPV 统计
- [对对子队]会议记录4.20(Scrum Meeting11)
- [对对子队]会议记录5.14(Scrum Meeting1)
- [no_code][Alpha]发布声明报告
- WEB前端工程师如何做职业规划?