p1359租用游艇

传送门题面复制时出了点问题

 第一次看发现像我这样的蒟蒻连题都没看懂,仔细研究一下样例花了我30分钟,细心地你会发现第m行的第n个数就是m到m+n的距离,于是我们就可以知道只是一道简单的dp。

于是我敲了一段代码。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>

using namespace std;

int main()
{
    int n;
    scanf("%d",&n);
    int a[201];
    int f[201][201];
    for(int i=1;i<n;i++)
    {        
        for(int j=i+1;j<=n;j++)
        {
            scanf("%d",&f[i][j]);
        }
        a[i]=1e9;    
    }
    for(int i=n-1;i>=1;i--)
    {
        for(int j=i+1;j<=n;j++)
        {
            a[i]=min(a[i],a[j]+f[i][j]);
        }
    }
    printf("%d",a[1]);
}

发现只有33分,不可思议,我可是看过题解的这时我的同桌让我把数组定义为全局变量,此时就ac了。

聪明的你知道为什么吗?因为全局变量初始值为0,这是我忽略的地方。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>

using namespace std;

int a[201];
int f[201][201];

int main()
{
    int n;
    scanf("%d",&n);    
    for(int i=1;i<n;i++)
    {        
        for(int j=i+1;j<=n;j++)
        {
            scanf("%d",&f[i][j]);
        }
        a[i]=1e9;    
    }
    for(int i=n-1;i>=1;i--)
    {
        for(int j=i+1;j<=n;j++)
        {
            a[i]=min(a[i],a[j]+f[i][j]);
        }
    }
    printf("%d",a[1]);
}

 

posted @ 2020-07-18 07:40  国服混子瑶  阅读(97)  评论(1编辑  收藏  举报