AcWing 732. 过河
原题链接
困难
作者:
fairydetail
,
2019-04-24 23:03:34
,
所有人可见
,
阅读 1469
#include<iostream>
#include<algorithm>
#include<cstring>
typedef long long LL;
using namespace std;
const int N=1e5;
int a[N];
int T,n;
LL dp[N];
int main()
{
cin>>T;
while(T--)
{
cin>>n;
for(int j=1;j<=n;j++)
{
cin>>a[j];
}
sort(a+1,a+n+1);
if(n<=3) cout<<a[n]<<endl;
else
{
dp[n+1]=0;
for(int i=n;i>=4;i--)
{
dp[i]=a[i]+a[2]+dp[i+1];
if(i+1<=n)
dp[i]=min(dp[i],a[3]+a[2]+a[i+1]+a[3]+dp[i+2]);
if(i+2<=n)
dp[i]=min(dp[i],a[3]+a[2]+a[4]+a[2]+a[i+2]+a[4]+dp[i+3]);
}
cout<<dp[4]+a[3]<<endl;
}
}
return 0;
}