BZOJ_1084_[SCOI2005]_最大子矩阵_(动态规划)

描述


http://www.lydsy.com/JudgeOnline/problem.php?id=1084

给出一个n*m的矩阵,其中m<=2,取k个子矩阵,求最大子矩阵和.

 

分析


1.m=1时

dp[i][k]表示在前i列里面选k个的最优解.那么对于第i列,有选和不选两种可能.则有:

dp[i][k]=max(dp[i-1][k],max{dp[x][k-1]+s1[i]-s1[x]}(0<x<i))

2.m=2时

dp[i][j][k]表示第一行前i列,第二行前j列选k个的最优解.那么可以分开考虑每一行的那一列选不选的情况,最后如果i==j,还要考虑两列一起选的情况.则有:

dp[i][j][k]=max(dp[i-1][j][k],dp[i][j-1][k],max{dp[x][j][k-1]+s1[i]-s1[x]}(0<x<i),max{dp[i][x][k-1]+s2[j]-s2[x]}(0<x<j),max{dp[x][x][k-1]+s1[i]-s1[x]+s2[j]-s2[x]}(0<x<i,0<x<j)))

 

 

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

 

 

1084: [SCOI2005]最大子矩阵

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 2115  Solved: 1049
[Submit][Status][Discuss]

Description

  这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大。注意:选出的k个子矩阵
不能相互重叠。

Input

  第一行为n,m,k(1≤n≤100,1≤m≤2,1≤k≤10),接下来n行描述矩阵每行中的每个元素的分值(每个元素的
分值的绝对值不超过32767)。

Output

  只有一行为k个子矩阵分值之和最大为多少。

Sample Input

3 2 2
1 -3
2 3
-2 3

Sample Output

9

HINT

Source

 

posted @ 2016-05-30 15:48  晴歌。  阅读(271)  评论(0编辑  收藏  举报