HDU-1081 To The Max 二维最大子序列和

来源:互联网 发布:我是歌手 知乎 编辑:程序博客网 时间:2024/06/05 05:41

http://acm.hdu.edu.cn/showproblem.php?pid=1081

把行压缩成一行 再一这行求最大子序列和 

这样就把二维转化为一维


#include <stdio.h>#include <string.h>#include <queue>using namespace std;const int maxn = 105;int n;int maxs;int map[maxn][maxn],dp[maxn];   //map存矩阵 dp为第i行之k行的数据压缩成一行的值int getDP(){int sum = 0,max = 0;for( int i = 1; i <= n; i ++ ){sum += dp[i];if( sum < 0 ){sum = 0;}max = max > sum ? max:sum;}return max;}int main(){ //freopen( "data.in","r",stdin );int sum;while( scanf("%d",&n) != EOF ) {for( int i = 1; i <= n; i ++ ){for( int j = 1; j <= n; j ++ ){scanf("%d",&map[i][j]);}}maxs = 0;for( int i = 1; i <= n; i ++ )   //第i行作为压缩的第一行{memset( dp,0,sizeof(dp) );for( int j = i; j <= n; j ++ )   //压缩第j行数据{for( int k = 1; k <= n; k ++ )   //压缩{dp[k] += map[j][k];}sum = getDP();//求一维最大子序列和maxs = maxs > sum ? maxs:sum;}}printf("%d\n",maxs);}return 0;}


原创粉丝点击