/*
* POJ_1700.cpp
*
* Created on: 2013年11月18日
* Author: Administrator
*/
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn = 1010;
int a[maxn];
int dp[maxn];
bool cmp(int a, int b){
return a < b;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
memset(dp,0,sizeof(dp));
int n;
scanf("%d",&n);
int i;
for(i = 0 ; i < n ; ++i){
scanf("%d",&a[i]);
}
sort(a,a+n,cmp);
dp[0] = a[0];//当只有一个人时的过河时间
dp[1] = a[1];//当有两个人时的过河时间
for(i = 2 ; i < n ; ++i){
/**
* 过河有两种策略:
* 第一种:由最快的来回接送(只利用了最快一个人)
* 第二种:最快的课次快的先过去,最快的回来,然后最慢的和次慢的过去,最后由次快的乘船回来(利用了最快和次快两个人)
*
*/
int min1 = dp[i-1] + a[i] + a[0];//第一种过河方案
int min2 = dp[i-2] + a[1] + a[0] + a[i] + a[1];//第二种过河方案
dp[i] = min(min1,min2);
}
printf("%d\n",dp[n-1]);
}
return 0;
}
(Relax 贪心 1.3)POJ 1700 Crossing River
最新推荐文章于 2023-04-14 02:21:45 发布