迁徙过程中的河流
题目链接
f[i]表示前i个人已经滑到对面的最小时间
根据贪心思路先从小到大排序
f[1]=w[1] ······第一个人滑到对岸时间
f[2]=w[2] ······前两个人一块滑到对岸时间
然后状态转移
f[i]=min(f[i-1]+w[1]+w[i],f[i-2]+w[1]+w[i]+2*w[2])
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 100010;
int f[N];
int w[N];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)cin>>w[i];
sort(w+1,w+n+1);
f[1]=w[1];
f[2]=w[2];
for(int i=3;i<=n;i++)
{
f[i]=min(f[i-1]+w[1]+w[i],f[i-2]+w[1]+w[i]+2*w[2]);
}
cout<<f[n]<<endl;
}