1. 程式人生 > 實用技巧 >p1359租用遊艇

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]); }