HDU 1081 To The Max ---二维dp
  VrZI4Uwu8BR1 2023年11月02日 54 0


给一段数列,求连续数列 和的最大值,

此题是二维的,将 i行到 j行 相加,转换为一行了,就是一维的了



#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;

int p[110][110],b[110];
int n;
int com(int *b)      //算一维的   函数
{
	int i,j,k,sum=0,max=-1;
	for(i=0;i<n;i++)
	{
		sum+=b[i];
		if(sum<0) sum=0;
		max=max>sum?max:sum;
	}
	return max;
}
int main()
{
	int i,j,k,sum,max=-1;
	while(scanf("%d",&n)!=EOF){
		memset(p,0,sizeof(p));
		for(i=0;i<n;i++)
			for(j=0;j<n;j++)
				scanf("%d",&p[i][j]);
		for(i=0;i<n;i++)
		{
			memset(b,0,sizeof(b));
			for(j=i;j<n;j++)
			{
				for(k=0;k<n;k++)
				{
					b[k] += p[j][k]; //将i到j行 的数相加,转换为一维的
				}
				sum=com(b);
				max=max>sum?max:sum;
			}
		}
		printf("%d\n",max);
	}
}




【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
VrZI4Uwu8BR1