UVa 108 - Maximum Sum
来源:互联网 发布:linux intel 显卡驱动 编辑:程序博客网 时间:2024/04/28 19:13
题目:最大子矩阵和。
分析:dp、最大字段和。二维的最大字段和。将问题转化为一维即可,即从第i列到第j列的最大字段和。所以预先对每行的第i到第j列求和,求每行的第i列到第j列的最大字段和。然后找到max[i][j]中最大的即为答案。时间复杂度O(N^3)、暴力O(N^4)。
注意:暴力枚举会TLE。
#include <stdio.h>#include <stdlib.h>#include <string.h>int dat[101][101];int sum[101][101][101];int max[101][101];int main(){int n; while ( scanf("%d",&n) != EOF ) {for ( int i = 1 ; i <= n ; ++ i ) for ( int j = 1 ; j <= n ; ++ j )scanf("%d",&dat[i][j]);for ( int i = 1 ; i <= n ; ++ i )for ( int j = 2 ; j <= n ; ++ j )dat[i][j] += dat[i][j-1];for ( int i = 1 ; i <= n ; ++ i )for ( int j = 1 ; j <= n ; ++ j )for ( int k = j ; k <= n ; ++ k )sum[i][j][k] = dat[i][k]-dat[i][j-1];int Max = -127;for ( int i = 1 ; i <= n ; ++ i )for ( int j = i ; j <= n ; ++ j ) {max[i][j] = -127;int add = 0;for ( int k = 1 ; k <= n ; ++ k ) {add += sum[k][i][j];if ( max[i][j] < add )max[i][j] = add;if ( add < 0 ) add = 0;}if ( Max < max[i][j] )Max = max[i][j];}printf("%d\n",Max);}return 0;}
- UVa 108 - Maximum Sum
- UVa 108 - Maximum Sum
- uva 108 - Maximum Sum
- UVa 108 - Maximum Sum
- UVa 108 - Maximum Sum
- UVa:108 Maximum Sum
- UVa 108: Maximum Sum
- UVA - 108 Maximum Sum
- UVA 108 Maximum Sum
- uva 108 Maximum Sum
- UVa 108 - Maximum Sum
- UVA 108 Maximum Sum
- UVA - 108 Maximum Sum
- uva 108 Maximum Sum
- uva 108 Maximum Sum
- Uva 108 Maximum Sum
- Uva 108 Maximum Sum
- UVa OJ 108-Maximum Sum
- 10000以内的素数
- 大端 小端
- php将对象转化为关联数组
- Java循环列表的简单实现
- 自定义jsp标签
- UVa 108 - Maximum Sum
- 图像分割___2
- 多项式求和
- h3状态
- java_23种设计模式之单例模式
- 设置Linux从控制台启动
- 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔
- VC编写的程序不能在其他机器上运行的解决方案
- 数据结构(C语言版)链队列的基本操作