题目链接:http://acm.hust.edu.cn/vjudge/contest/121396#problem/F
题意:这个题与那个数组三角形的题差不多,只不过是多了一个倒三角而已;
分析:需要注意的是定义一个怎样的状态,根据这个状态写出状态转移方程
状态转移方程: dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+a[i][j] 上三角
dp[i][j]=max(dp[i-1][j],dp[i-1][j+1])+a[i][j] 下三角
AC代码:
#include <iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int dp[1050][1050];
int a[1050][1050];
int main()
{
int t,n,ans;;
scanf("%d",&t);
ans=1;
while(t--)
{
scanf("%d",&n);
memset(dp,0,sizeof(dp));
memset(a,0,sizeof(a));
for(int i=1; i<=n; i++)
for(int j=1; j<=i; j++)
scanf("%d",&a[i][j]);
for(int i=n+1; i<2*n; i++)
for(int j=1; j<=2*n-i; j++)
scanf("%d",&a[i][j]);
dp[1][1]=a[1][1];
for(int i=1; i<=n; i++)
for(int j=i; j>=1; j--)
dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+a[i][j];
for(int i=n+1; i<2*n; i++)
for(int j=1; j<=2*n-i; j++)
dp[i][j]=max(dp[i-1][j],dp[i-1][j+1])+a[i][j];
printf("Case %d: %d
",ans++,dp[2*n-1][1]);
}
return 0;
}