https://www.luogu.com.cn/problem/P1359
思路:
d
p
[
i
]
dp[i]
dp[i]表示到第
i
i
i个游艇出租站所需要的最少租金,那么有:
d
p
[
i
]
=
m
i
n
(
d
p
[
i
]
,
d
p
[
j
]
+
c
o
s
t
[
j
]
[
i
]
)
dp[i]=min(dp[i],dp[j]+cost[j][i])
dp[i]=min(dp[i],dp[j]+cost[j][i])其中
1
<
=
j
<
i
1<=j<i
1<=j<i。
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define eps 1e-8
#define pr pair<int,int>
using namespace std;
typedef long long ll;
int n;
int v[205][205];
int dp[205];//dp[i]表示到第i个游艇出租站所需的最少租金
int main()
{
scanf("%d",&n);
for(int i=1;i<n;i++)
for(int j=i+1;j<=n;j++)
scanf("%d",&v[i][j]);
memset(dp,INF,sizeof(dp));
dp[1]=0;
for(int i=2;i<=n;i++)
{
for(int j=1;j<i;j++)
dp[i]=min(dp[i],dp[j]+v[j][i]);
}
printf("%d\n",dp[n]);
return 0;
}