HDU 2084

经典的dp问题

从上往下,状态转移方程为dp[i,j]=max{dp[i-1][j-1],dp[i-1][j]}+a[i,j]

代码如下;(这是第一次AC的代码,应该可以继续优化,有时间再继续完善)

# include 
# include 
using namespace std;

int a[100][100],dp[100][100];

int main()
{
	//freopen("input.txt","r",stdin);
	int c;
	scanf("%d",&c);
	while(c--)
	{
		int n;
		scanf("%d",&n);
		int i,j;
		for(i=1;i<=n;i++)
		{
			for(j=1;j<=i;j++)
				scanf("%d",&a[i][j]);
		}
		dp[1][1]=a[1][1];
		dp[1][0]=0;
		for(i=2;i<=n;i++)
		{
			for(j=1;j<=i;j++)
			{
				dp[i][j]=max(dp[i-1][j-1],dp[i-1][j])+a[i][j];
			}
		}
		int maxSum=0;
		for(j=1;j<=n;j++)
		{
			maxSum=max(maxSum,dp[n][j]);
		}
		printf("%d\n",maxSum);
	}
	return 0;
}


你可能感兴趣的:(acm)