为什么会T后四个点,求dalao优化

P1216 [USACO1.5] [IOI1994]数字三角形 Number Triangles

YuRuiH_ @ 2017-07-18 10:47:21

**#include<bits/stdc++.h>    
int n,a[1001][1001];
int ans=0;
using namespace std;
void dfs(int x,int y,int sum)
{
    if(x==n)
    {
        ans=max(ans,sum);
        return;
    }
    dfs(x+1,y,sum+a[x+1][y]);
    dfs(x+1,y+1,sum+a[x+1][y+1]);
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=i;j++)
            scanf("%d",&a[i][j]);
    dfs(1,1,a[1][1]);
    printf("%d",ans);
}**

by 周忠皓 @ 2017-07-18 11:28:51

这样来:因为左下,右下你应该挑一个最优方案,而你都找了一遍,所以浪费了一半的时间。可以DP,从下往上逆推,状态转移方程为(dp[i][j]+=max(dp[i+1][j],dp[i+1][j+1])//初始值为点上的数字)


by YuRuiH_ @ 2017-07-18 18:16:18

@周忠皓 谢谢dalao指点


|