uva 108 Maximum Sum

来源:互联网 发布:昆山数控编程培训 编辑:程序博客网 时间:2024/04/28 23:17

变形的最大子串和问题,使用动态规划的方法。

#include <stdio.h>long long arr[105][105];void func(int n){int i, j;int start, end;long long source[105], result[105];long long max, cur_max;for(start=1; start<=n; start++)for(end=start; end<=n; end++){for(i=1; i<=n; i++){source[i] = 0;for(j=start; j<=end; j++)source[i] += arr[i][j];}for(i=1; i<=n; i++){if(1 == i)result[i] = source[i];else{if(result[i-1] < 0)result[i] = source[i];elseresult[i] = result[i-1] + source[i];}}cur_max = result[1];for(i=2; i<=n; i++){if(cur_max < result[i])cur_max = result[i];}if(1==start && 1==end){max = cur_max;}else{if(max < cur_max)max = cur_max;}}printf("%lld\n", max);}int main(void){int n, i, j;//freopen("input.dat", "r", stdin);scanf("%d", &n);for(i=1; i<=n; i++){for(j=1; j<=n; j++)scanf("%lld", arr[i]+j);}func(n);return 0;}