【BZOJ1084】【杂题DP】[SCOI2005]最大子矩阵 题解
2017-10-13 21:59
405 查看
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
这里有一个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
#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <set> #include <queue> #include <algorithm> #include <vector> #include <cstdlib> #include <cmath> #include <ctime> #include <stack> #define INF 2100000000 #define ll long long #define clr(x) memset(x,0,sizeof(x)) using namespace std; template <class T> inline void read(T &x) { int flag = 1; x = 0; register char ch = getchar(); while(ch < '0' || ch > '9') { if(ch == '-') flag = -1; ch = getchar(); } while(ch >= '0' && ch <= '9') { x = (x<<1)+(x<<3)+ch-'0'; ch = getchar(); } x *= flag; } int dp[101][11],f[101][101][11]; int n,m,K; int sum[101]; int s1[101],s2[101]; int main() { scanf("%d%d%d",&n,&m,&K); if(m == 1) { for(int i = 1; i <= n; i++) read(k), sum[i] = sum[i-1]+k; for(int i = 1; i <= n; i++) for(int k = 1; k <= K; k++) { dp[i][k] = dp[i-1][k]; for(int j = 0; j < i; j++) dp[i][k] = max(dp[i][k], dp[j][k-1]+sum[i]-sum[j]); } cout << dp [K] << endl; } else { int s,ss; for(int i = 1; i <= n; i++) read(s), read(ss), s1[i] = s1[i-1]+s, s2[i] = s2[i-1]+ss; for(int k = 1; k <= K; k++) for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) { f[i][j][k] = max(f[i-1][j][k], f[i][j-1][k]); for(int l = 0; l < i; l++) f[i][j][k] = max(f[i][j][k], f[l][j][k-1]+s1[i]-s1[l]); for(int l = 0; l < j; l++) f[i][j][k] = max(f[i][j][k], f[i][l][k-1]+s2[j]-s2[l]); if(i == j) for(l = 0; l < i; l++) f[i][j][k] = max(f[i][j][k], f[l][l][k-1]+s1[i]-s1[l]+s2[j]-s2[l]); } cout << f [K] << endl; } return 0; }
相关文章推荐
- 【BZOJ】1084: [SCOI2005]最大子矩阵(DP)
- [DP] bzoj1084: [SCOI2005]最大子矩阵
- 【BZOJ 1084】 1084: [SCOI2005]最大子矩阵 (DP)
- BZOJ 1084: [SCOI2005]最大子矩阵( dp )
- bzoj1084 [SCOI2005]最大子矩阵(dp)
- [BZOJ 1084] SCOI 2005 最大子矩阵 · 简单DP
- bzoj1084: [SCOI2005]最大子矩阵(Dp)
- [BZOJ1084][SCOI2005]最大子矩阵(dp)
- [bzoj1084][SCOI2005]最大子矩阵(DP)
- bzoj 1084: [SCOI2005]最大子矩阵 (DP)
- 【BZOJ 1084】 [SCOI2005]最大子矩阵(DP)
- bzoj1084: [SCOI2005]最大子矩阵(dp)
- bzoj 1084;vijos 1191 [SCOI2005] 最大子矩阵
- [SCOI2005][BZOJ1084] 最大子矩阵
- bzoj1084: [SCOI2005]最大子矩阵-DP
- [BZOJ 1084][SCOI2005]最大子矩阵
- [bzoj 1084--SCOI2005]最大子矩阵
- bzoj千题计划198:bzoj1084: [SCOI2005]最大子矩阵
- bzoj 1084: [SCOI2005]最大子矩阵【dp】
- BZOJ 1084: [SCOI2005]最大子矩阵 DP