洛谷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
",f[n]);
	return 0;
}
原文地址:https://www.cnblogs.com/ninedream/p/12926772.html