zoukankan      html  css  js  c++  java
  • [SCOI2005]最大子矩阵

    题目描述

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

    输入输出格式

    输入格式:

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

    输出格式:

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

    输入输出样例

    输入样例#1: 复制
    3 2 2
    1 -3
    2 3
    -2 3
    
    输出样例#1: 复制
    9




    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define LL long long int
    #define max(a,b) ((a) > (b) ? (a) : (b))
    #define REP(i,n) for (int i = 1; i <= (n); i++)
    #define fo(i,x,y) for (int i = (x); i <= (y); i++)
    #define Redge(u) for (int k = head[u]; k != -1; k = edge[k].next)
    using namespace std;
    const int maxn = 105,maxm = 15,INF = 1000000000;
    
    inline int read(){
    	int out = 0,flag = 1;char c = getchar();
    	while (c < 48 || c > 57) {if (c == '-') flag = -1; c = getchar();}
    	while (c >= 48 && c <= 57) {out = out * 10 + c - 48; c = getchar();}
    	return out * flag;
    }
    
    int A[maxn][3],n,m,K,f[maxn][maxm][5];
    
    int main()
    {
    	n = read(); m = read(); K = read();
    	REP(i,n) REP(j,m) A[i][j] = read();
    	for (int i = 1; i <= n; i++)
    		for (int j = 1; j <= K; j++){
    			f[i][j][0] = max(max(max(f[i - 1][j][0],f[i - 1][j][1]),max(f[i - 1][j][2],f[i - 1][j][3])),f[i - 1][j][4]);
    			f[i][j][1] = max(max(max(f[i - 1][j - 1][0],f[i - 1][j][1]),max(f[i - 1][j - 1][2],f[i - 1][j][3])),f[i - 1][j - 1][4]) + A[i][1];
    			f[i][j][2] = max(max(max(f[i - 1][j - 1][0],f[i - 1][j - 1][1]),max(f[i - 1][j][2],f[i - 1][j][3])),f[i - 1][j - 1][4]) + A[i][2];
    			if (j > 1)
    				f[i][j][3] = max(max(max(f[i - 1][j - 2][0],f[i - 1][j - 1][1]),max(f[i - 1][j - 1][2],f[i - 1][j][3])),f[i - 1][j - 2][4]) + A[i][1] + A[i][2];
    			f[i][j][4] = max(max(max(f[i - 1][j - 1][0],f[i - 1][j - 1][1]),max(f[i - 1][j - 1][2],f[i - 1][j - 1][3])),f[i - 1][j][4]) + A[i][1] + A[i][2];
    		}
    	int ans = max(max(max(f[n][K][0],f[n][K][1]),max(f[n][K][2],f[n][K][3])),f[n][K][4]);
    	printf("%d
    ",ans);
    	return 0;
    }
    

  • 相关阅读:
    Google官方教程之Selling In-app Products
    In-app Billing 概述
    Android SDK和ADT无法更新的解决办法
    在NGUI中高效优化UIScrollView之UIWrapContent的简介以及使用
    cocos2d-x 3.1 编译脚本android-build.py
    Storm---DirectGroup(直接分组)
    Lucene Spatial构建地理空间索引
    Log4j2日志配置
    Guava缓存使用
    Maven 多套环境配置
  • 原文地址:https://www.cnblogs.com/Mychael/p/8282840.html
Copyright © 2011-2022 走看看