SSLOJ 1214 过桥
Description–
解题思路–
用f[i]表是有i个人过了桥
f[i]=min(f[i-1]+a[1]+a[i],f[i-2]+a[1]+a[i]+a[2]+a[2]);表示min(1号回去接i,1号回去—i、i-1过桥—2号再去接1号)
代码–
#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
int n,a[1005],f[1005];
int main()
{
scanf("%d",&n);
for (int i=1;i<=n;++i)
scanf("%d",&a[i]);
sort(a,a+n+1);
f[1]=a[1],f[2]=a[2];//初始化
for(int i=3;i<=n;i++)
f[i]=min(f[i-1]+a[1]+a[i],f[i-2]+a[1]+a[i]+a[2]+a[2]);
printf("%d",f[n]);
return 0;
}