A - 最大子矩阵 HYSBZ - 1084 (DP)
题目链接:https://cn.vjudge.net/contest/281963#problem/A
题目大意:中文题目
具体思路:观察到m<=2,所以我们可以对两种情况进行单独讨论,当m==1时,dp[i][j]表示将前i行分成j组的最大值,所以最终输出dp[n][k]就可以了。在每一次递推的时候就看一下前面的i-1行的分成j-1组的最大值+a[i]-a[L]就可以了。当m==2的时候,就把他看成单独的两列进行求解就可以了。
AC代码:
#include<iostream>
#include<stack>
#include<cmath>
#include<stdio.h>
#include<queue>
#include<algorithm>
using namespace std;
# define ll long long
const int maxn = +;
int dp1[maxn][maxn];
int dp[maxn][maxn][maxn];
int a[maxn],b[maxn];
int main()
{
int n,m,k,t1,t2;
scanf("%d %d %d",&n,&m,&k);
if(m==)
{
for(int i=; i<=n; i++)
{
scanf("%d",&t1);
a[i]=a[i-]+t1;
}
for(int i=; i<=n; i++)
{
for(int j=; j<=k; j++)
{
dp1[i][j]=dp1[i-][j];
for(int L=; L<i; L++)
{
dp1[i][j]=max(dp1[i][j],dp1[L][j-]+a[i]-a[L]);
}
}
}
printf("%d\n",dp1[n][k]);
}
else
{
for(int i=; i<=n; i++)
{
scanf("%d %d",&t1,&t2);
a[i]=a[i-]+t1;
b[i]=b[i-]+t2;
}
for(int i=; i<=k; i++)
{
for(int i1=; i1<=n; i1++)
{
for(int j1=; j1<=n; j1++)
{
dp[i1][j1][i]=max(dp[i1-][j1][i],dp[i1][j1-][i]);
for(int L=; L<i1; L++)
{
dp[i1][j1][i]=max(dp[i1][j1][i],dp[L][j1][i-]+a[i1]-a[L]);
}
for(int L=; L<j1; L++)
{
dp[i1][j1][i]=max(dp[i1][j1][i],dp[i1][L][i-]+b[j1]-b[L]);
}
if(i1==j1)
{
for(int L=; L<i1; L++)
{
dp[i1][j1][i]=max(dp[i1][j1][i],dp[L][L][i-]+a[i1]-a[L]+b[i1]-b[L]);
}
}
}
}
}
printf("%d\n",dp[n][n][k]);
}
return ;
}
A - 最大子矩阵 HYSBZ - 1084 (DP)的更多相关文章
- 1084. [SCOI2005]最大子矩阵【网格DP】
Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵 不能相互重叠. Input 第一行为n,m,k(1≤n≤100,1≤m≤ ...
- 【SCOI2005】 最大子矩阵 BZOJ 1084
Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. Input 第一行为n,m,k(1≤n≤100,1≤m≤2 ...
- NOIP2014pj子矩阵[搜索|DP]
题目描述 给出如下定义: 子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与列的相对顺序)被称为原矩阵的一个子矩阵. 例如,下面左图中选取第2.4行和第2.4.5列交叉位置的元素 ...
- 51nod 1051 最大子矩阵和(dp)
题目链接:51nod 1051 最大子矩阵和 实质是把最大子段和扩展到二维.读题注意m,n... #include<cstdio> #include<cstring> #inc ...
- bzoj 1084 DP
首先对于m==1的情况非常容易处理(其实这儿因为边界我错了好久...),直接DP就好了,设f[i][k]为这个矩阵前i个选k个矩阵的最大和,那么f[i][k]=max(f[j][k-1]+sum[j+ ...
- URAL 1146 Maximum Sum(最大子矩阵的和 DP)
Maximum Sum 大意:给你一个n*n的矩阵,求最大的子矩阵的和是多少. 思路:最開始我想的是预处理矩阵,遍历子矩阵的端点,发现复杂度是O(n^4).就不知道该怎么办了.问了一下,是压缩矩阵,转 ...
- 51Nod--1051最大子矩阵和(DP入门)
分析: 我们已经解决了一维的问题(基础篇中的最大子段和问题),现在变成二维了,我们看看能不能把这个问题转化为一维的问题.最后子矩阵一定是在某两行之间的.假设我们认为子矩阵在第i行和第j列之间,我们如何 ...
- 最大子矩阵和问题dp
给定一个矩阵 matrix,其中矩阵中的元素可以包含正数.负数.和0,返回子矩阵的最大累加和.例如,矩阵 matrix 为: 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 - ...
- poj 1050 To the Max 最大子矩阵和 经典dp
To the Max Description Given a two-dimensional array of positive and negative integers, a sub-rect ...
随机推荐
- codeforces279B
Books CodeForces - 279B When Valera has got some free time, he goes to the library to read some book ...
- QAU 17校赛 J题 剪丝带(完全背包变形)
题意: 剪一段丝带,对于剪完后的每一段丝带长度必须是a,b,c 输入丝带的长度 n 和 a b c 输出一个整数,代表最多能剪成多少段 样例输入 5 5 3 2 7 5 5 2 样例输出 2 ...
- hud 1312
There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A ...
- python3.5 opencv3显示视频fps
由于要进行多路视频的处理,所以fps就很重要 fps介绍 模板: 1.获取某一时刻的fps import time while True: start_time = time.time() # sta ...
- 自学Aruba1.4-Aruba体系结构-产品线
点击返回:自学Aruba之路 1. Aruba产品线 IP switches: 1500.2500.3500 Controllers:7200 .70x0 Series.7005 Meridian:基 ...
- 自学Zabbix3.10.2-事件通知Notifications upon events-Actions报警配置
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix3.10.2-事件通知Notifications upon events-Acti ...
- 自学Python5.4-类 _init_方法
自学Python之路 自学Python5.4-类 _init_方法 1. 定义一个类 定义一个类的格式如下:
- 【BZOJ3309】DZY Loves Math(莫比乌斯反演)
[BZOJ3309]DZY Loves Math(莫比乌斯反演) 题面 求 \[\sum_{i=1}^a\sum_{j=1}^bf(gcd(a,b))\] 其中,\(f(x)\)表示\(x\)分解质因 ...
- 【转】IAR IDE for MSP430、8051、ARM等平台的结合使用
IAR IDE for MSP430.8051.ARM等平台的结合使用 以前很长一段时间使用IAR作为MSP430的开发平台,前几天一个无线监控的项目用到了Zigbee(CC2530),于是开始使用I ...
- 【codeforces 768F】 Barrels and boxes
http://codeforces.com/problemset/problem/768/F (题目链接) 题意 A,B两种物品可以装到栈中,每个栈只能存放一种物品,容量没有限制.现在讲所有栈排成一列 ...