poj1700过河问题(贪心)

来源:互联网 发布:天天特价淘宝网衣服 编辑:程序博客网 时间:2024/05/01 14:20

题目链接:poj1700

/*两种过河策略:1、用速度最快的那个每次将人载过河,再回来载其他的人2、用速度最快的和次快的循环载人,即最快的和次快的先过河,次快的留下,最快的回来,接着最慢和次慢的人过河,次快的回来*/#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int inf = 0xfffffff;const int N = 1005;int a[N];int main(){    int T,n,i;    scanf("%d",&T);    while(T--)    {        scanf("%d",&n);        for(i = 1; i <= n; i ++)        scanf("%d",&a[i]);        int sum = 0;        sort(a+1, a+n+1);//排序        for(i = n; i >= 4; i -= 2)        {            int tmp1 = 2*a[1] + a[i] + a[i-1];//策略1            int tmp2 = a[1] + 2*a[2] + a[i];//策略2            sum += min(tmp1, tmp2);        }        if(i == 3) sum += a[1] + a[2] + a[3];//剩下三个人        if(i == 2) sum += a[2];//剩下两个人        if(i == 1) sum += a[1];//剩下一个人        printf("%d\n",sum);    }    return 0;}


0 0
原创粉丝点击