题解 P1359 【租用游艇】
这道题是一道dp题,。
首先,我们要先存图。
看看样例吧:
3
5 15
7
显然,5和15是中转站1到2和3的价钱,而7是2到3的价钱。我们可以用a数组来存,
| 中转站1 | 中转站2 | 中转站3 | |
|---|---|---|---|
| 中转站1 | 0 | 5 | 15 |
| 中转站2 | 0 | 0 | 7 |
| 中转站3 | 0 | 0 | 0 |
我们可以用
| 中转站1 | 中转站2 | 中转站3 | |
|---|---|---|---|
| 最小价钱 | 12 | 7 | 0 |
我们要用
附上代码:
#include<iostream>
#include<cmath>
using namespace std;
int a[201][201],i,j,n,dp[201];
int main(){
cin>>n;
for(i=1;i<n;i++){
for(j=i+1;j<=n;j++)
cin>>a[i][j];
dp[i]=1e9;//初始化数组dp,使它
}
for(i=n-1;i>=1;i--)//跑n上流的中转站
for(j=i+1;j<=n;j++)//跑i下流的所有中转站
dp[i]=min(dp[i],a[i][j]+dp[j]);//记录
cout<<dp[1];
return 0;
}
PS:蒟蒻的题解,大佬勿喷!