洛谷P1359 租用游艇
原题链接
算法概述
f[i]表示从1号点开始到当前站点下船所需的最少价值。
对于f[i],考虑枚举最后一次租船的起始站点j,1<=j<=i-1,
则有f[i]=min{f[j] + w[j][i]}
边界,显然在1号点时无需付钱,f[1]=0。
注意要求最小值,故初始化正无穷。
参考代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=210,INF=0x3f3f3f3f;
int w[N][N];
int f[N];
int n;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
scanf("%d",&w[i][j]);
memset(f,0x3f,sizeof f);
f[1]=0;
for(int i=1;i<=n;i++)
for(int j=1;j<i;j++)
f[i]=min(f[i],f[j]+w[j][i]);
printf("%d\n",f[n]);
return 0;
}

浙公网安备 33010602011771号