题意:从塔顶到塔底,每个点都有一个数字,求一条不能回走的路径,使经过的点的和最大
题目链接:数塔
解题思路:咳咳,题目都说了是个DP题,那就用DP方法吧!DP有自顶向下和自顶向上两种方法,可以试着比较两种方法。
自底向上的状态转移方程dp[i][j]=a[i][j]
=max(dp[i+1][j],dp[i+1][j+1])+a[i][j]
自顶向下的就不多说了,都差不多,但比自顶向下要单独考虑每层最后一个和第一个的情况。
代码:
#include
#include
#include
#include
using namespace std;
int dp[105][105],a[105][105];
int main()
{
int T,i,j,n;
cin>>T;
while(T--){
cin>>n;
memset(dp,0,sizeof(dp));
for(i=0;i
>a[i][j]; if(i== n-1) dp[i][j]=a[i][j]; //自底向上 } } for(i=n-2;i>=0;i--){ for(j=0;j
#include
#include
#include
using namespace std; int dp[105][105],a[105][105]; int main() { int T,i,j,n,ans; cin>>T; while(T--){ cin>>n; memset(dp,0,sizeof(dp)); for(i=0;i
>a[i][j]; } } dp[0][0]=a[0][0]; //自顶向下 for(i=1;i