现在的位置: 首页 > 综合 > 正文

命运 2571 hdu

2013年10月12日 ⁄ 综合 ⁄ 共 604字 ⁄ 字号 评论关闭

简单的动态规划 

#include<iostream>
#include<cstdio>
using namespace std;
int Max(int a,int b)
{
	if(a>b)
		return a;
	return b;
}
int main()
{
	int t,n,m,k,i,j,map[23][1003],dp[23][1003];
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%d",&n,&m);
		for(i=1;i<=n;i++)
			for(j=1;j<=m;j++)
				scanf("%d",&map[i][j]);
		for(i=0;i<=n+1;i++)
			dp[i][0]=-9999;
		for(j=0;j<=m+1;j++)
			dp[0][j]=-9999;
		dp[1][1]=map[1][1];
		for(i=1;i<=n;i++)
			for(j=1;j<=m;j++)
			{
				if(i!=1||j!=1)
				{
					dp[i][j]=(dp[i-1][j]+map[i][j])>(dp[i][j-1]+map[i][j])?(dp[i-1][j]+map[i][j]):(dp[i][j-1]+map[i][j]);
					for(k=1;k<=j/2;k++)
						if(j%k==0)
							dp[i][j]=Max(dp[i][j],(dp[i][k]+map[i][j]));
				}
			}
		printf("%d\n",dp[n][m]);

	}
	return 0;
}

抱歉!评论已关闭.