题目链接: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)的更多相关文章

  1. 1084. [SCOI2005]最大子矩阵【网格DP】

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

  2. 【SCOI2005】 最大子矩阵 BZOJ 1084

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

  3. NOIP2014pj子矩阵[搜索|DP]

    题目描述 给出如下定义: 子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与列的相对顺序)被称为原矩阵的一个子矩阵. 例如,下面左图中选取第2.4行和第2.4.5列交叉位置的元素 ...

  4. 51nod 1051 最大子矩阵和(dp)

    题目链接:51nod 1051 最大子矩阵和 实质是把最大子段和扩展到二维.读题注意m,n... #include<cstdio> #include<cstring> #inc ...

  5. bzoj 1084 DP

    首先对于m==1的情况非常容易处理(其实这儿因为边界我错了好久...),直接DP就好了,设f[i][k]为这个矩阵前i个选k个矩阵的最大和,那么f[i][k]=max(f[j][k-1]+sum[j+ ...

  6. URAL 1146 Maximum Sum(最大子矩阵的和 DP)

    Maximum Sum 大意:给你一个n*n的矩阵,求最大的子矩阵的和是多少. 思路:最開始我想的是预处理矩阵,遍历子矩阵的端点,发现复杂度是O(n^4).就不知道该怎么办了.问了一下,是压缩矩阵,转 ...

  7. 51Nod--1051最大子矩阵和(DP入门)

    分析: 我们已经解决了一维的问题(基础篇中的最大子段和问题),现在变成二维了,我们看看能不能把这个问题转化为一维的问题.最后子矩阵一定是在某两行之间的.假设我们认为子矩阵在第i行和第j列之间,我们如何 ...

  8. 最大子矩阵和问题dp

    给定一个矩阵 matrix,其中矩阵中的元素可以包含正数.负数.和0,返回子矩阵的最大累加和.例如,矩阵 matrix 为: 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 - ...

  9. poj 1050 To the Max 最大子矩阵和 经典dp

    To the Max   Description Given a two-dimensional array of positive and negative integers, a sub-rect ...

随机推荐

  1. java 使用 WebUploader

    参考: http://blog.csdn.net/finalAmativeness/article/details/54668090 最近项目需要多文件上传. 所以使用了 baidu的 webuplo ...

  2. .net event 使用 Action

    Action<string> methodCall = (x) => { x += "haha"; MessageBox.Show(x); }; public e ...

  3. [ctsc2018] 混合果汁 【可持久化线段树】【二分答案】

    题目分析 首先考虑到最小值最大,二分答案.假设答案为k,显然这满足单调性.如果某个k使得这个情况下选不出.那么比k大的一定也选不出,所以二分答案. 接着我们可以贪心,当我们确认了k以后,一定会优先选费 ...

  4. Harmonic Number (II) LightOJ - 1245 (找规律?。。。)

    题意: 求前n项的n/i  的和 只取整数部分 暴力肯定超时...然后 ...现在的人真聪明...我真蠢 觉得还是别人的题意比较清晰 比如n=100的话,i=4时n/i等于25,i=5时n/i等于20 ...

  5. 【AtCoder010】B - Boxes(差分)

    AtCoder Grand Contest 010 B题 题目链接 题意 n个盒子,第i个盒子有ai个石头. 重复这个步骤:选一个盒子i,每次从第i+j个盒子中移走j个石头,j从1到n,第n+k个盒子 ...

  6. 【BZOJ2285】[SDOI2011]保密(分数规划,网络流)

    [BZOJ2285][SDOI2011]保密(分数规划,网络流) 题面 BZOJ 洛谷 题解 首先先读懂题目到底在干什么. 发现要求的是一个比值的最小值,二分这个最小值\(k\),把边权转换成\(t- ...

  7. 洛谷 P4408 逃学的小孩 解题报告

    P4408 [NOI2003]逃学的小孩 题目描述 Chris家的电话铃响起了,里面传出了Chris的老师焦急的声音:"喂,是Chris的家长吗?你们的孩子又没来上课,不想参加考试了吗?&q ...

  8. 单片机I/O口的结构的详解

    1.什么是源型 漏型?什么是上拉电阻?下拉电阻?什么是 线驱动输出 集电极开路输出,推挽式输出? 我们先来说说集电极开路输出的结构.集电极开路输出的结构如图1所示,右边的那个三极管集电极什么都不接,所 ...

  9. Ubuntu16.04创建electronic-wechat启动器图标

    步骤 将最新的electronic-wechat二进制包,下载解压,并移动到/opt/下面.sudo cp -r electronic-wechat/ /opt/electronic-wechat/ ...

  10. css3硬件加速

    你知道我们可以在浏览器中用css开启硬件加速,使GPU (Graphics Processing Unit) 发挥功能,从而提升性能吗? 现在大多数电脑的显卡都支持硬件加速.鉴于此,我们可以发挥GPU ...