89分求救QAQ

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

NoraHayes @ 2017-10-18 17:51:27

#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1010;
int dis[maxn][maxn];
int data[maxn][maxn];
int line;
int main()
{
    cin>>line;
    for(int i=0;i<line;i++)
    {
        for(int j=0;j<i;j++)
        {
            cin>>data[i][j];
            dis[i][j]=data[i][j];
        }    
    }
    for(int i=line-1;i>0;i--)
    {
        for(int j=0;j<i;j++)
        {
            dis[i][j]=data[i][j]+max(dis[i+1][j],dis[i+1][j+1]);
            if(dis[i][j]==data[i][j])break;
        }
    }
    cout<<dis[1][1]<<endl;
    return 0;
}

by NoraHayes @ 2017-10-18 17:51:51

完全不知道到底错在哪里orz


by NoraHayes @ 2017-10-18 17:55:14

啊贴错了 是这个

#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1005;
int d[maxn][maxn];
int data[maxn][maxn];
int line;
int main()
{
    cin>>line;
    for(int i=1;i<=line;i++)
    {
        for(int j=1;j<=i;j++)
        {
            cin>>data[i][j];
            d[i][j]=data[i][j];
        }    
    }
    for(int i=line-1;i>0;i--)
    {
        for(int j=1;j<=i;j++)
        {
            d[i][j]=data[i][j]+max(d[i+1][j],d[i+1][j+1]);
            if(d[i][j]==data[i][j])break;
        }
    }
    cout<<d[1][1]<<endl;
    return 0;
}

by 兮水XiShui丶 @ 2017-10-21 14:04:38

@NoraHayes 就是个简单的DP水题,没什么难度啊QAQ

你看下我的代码:

#include<iostream>
#include<algorithm>
int f[1005][1005];
using namespace std;
int main()
{
    int n;cin>>n;
    for(int i=1;i<=n;i++)
     for(int j=1;j<=i;j++)
      cin>>f[i][j];
    for(int i=n-1;i>=1;i--)
     for(int j=1;j<=i;j++)
     f[i][j]=max(f[i][j]+f[i+1][j],f[i][j]+f[i+1][j+1]);
    cout<<f[1][1];  
}

by KillerXu @ 2017-10-25 21:32:13

真是坑的不要不要的,数组开1001*1001过不了,开1005*1005就过了


by Frank06 @ 2017-10-28 18:17:06

@许思远 我这样也能过啊

#include<iostream>
using namespace std;
int r,dp[1001][1001];
int main()
{
    cin>>r;
    for(int i=1;i<=r;i++)
        for(int j=1;j<=i;j++)
            cin>>dp[i][j];
    for(int i=r-1;i>=1;i--)
        for(int j=1;j<=r;j++)
            dp[i][j]+=max(dp[i+1][j],dp[i+1][j+1]);
    cout<<dp[1][1];
    return 0;
}

by KillerXu @ 2017-10-30 22:04:39

@Frank06 说明我的电脑有毒= =


by _LanFeng_ @ 2017-12-22 17:55:34

@许思远 1001*1001我也过了啊


|