传送门题面复制时出了点问题
第一次看发现像我这样的蒟蒻连题都没看懂,仔细研究一下样例花了我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]); }