poj1700 过河问题---贪心算法

来源:互联网 发布:客观评价蒋介石 知乎 编辑:程序博客网 时间:2024/05/01 19:35
#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>#include <cstring>#include <string>#include <vector>#include <queue>#define LL long long #define N 1100using namespace std;    //poj1700  过河问题---贪心算法int a1[N];int main(){int n, t, ans, T, a, b, c, d;scanf("%d", &T);while(T--){scanf("%d", &n);for(t=0; t<n; ++t)scanf("%d", a1+t);sort(a1, a1+n);if(n==1){printf("%d\n", a1[0]);continue;}a=a1[0];b=a1[1];for(t=n-1, ans=0; t>=0; )   //先把右边大的数移过去{if(t==1)  //最后只剩下a和b{ans+=b;break;}if(t==2)  //最后只剩下三个{ans+=a+b+a1[t];break;}c=a1[t-1];d=a1[t];if(2*b>a+c)   //最优方案有两种{ans+=a+c+a+d;}else ans+=2*b+a+d;t-=2;}printf("%d\n", ans);}return 0;}

0 0
原创粉丝点击