POJ 1700

来源:互联网 发布:情侣 知乎 编辑:程序博客网 时间:2024/06/10 16:02

贪心,discuss中也有DP的做法。

主要思路是每次循环中送最慢和倒数第二慢的去对岸。

有2种送法,不同情况下,最快的送法不同。

2种送法的核心思路是确保回来的时候是最快的人开船回来,送去对岸时,能尽量把2个最慢的捏一起送。


#include<cstdio>#include<cstdlib>int cmp(const void *a,const void *b){    return *(int *)a-*(int *)b;}int main(){    int t;    scanf("%d",&t);    while(t--)    {        int n;        scanf("%d",&n);        int a[n];        for(int i=0;i<n;i++)            scanf("%d",&a[i]);        qsort(a,n,sizeof(a[0]),cmp);        int ans=0;        if(n==1) {printf("%d\n",a[0]); continue;}        for(int i=n-1;i>=0;i-=2)        {            if(i==1) {ans+=a[1]; break;}            else if(i==2) {ans+=a[1]+a[0]+a[i]; break;}            if(a[i]+a[0]+a[i-1]+a[0]<a[1]+a[0]+a[i]+a[1]) ans+=a[i]+a[0]+a[i-1]+a[0];            else ans+=a[1]+a[0]+a[i]+a[1];        }        printf("%d\n",ans);    }    return 0;}


0 0
原创粉丝点击