POJ 1700
阿新 • • 發佈:2018-09-22
brush esp highlight 一道 || ring ans get getchar
這是一道貪心的題目
(貪心題好難,他們都是怎麽想出來的)
當總人數大於等於4時,有兩種情況
1 最快和最慢的過河,最快的回來;
最快和次慢的過河,最快的回來。
2 最快和次快的過河,最快的回來;
最慢和次慢的過河,次快的回來。
每次反復叠代,直到總人數比四小。
若總人數等於3 ,則是最快和最慢的過河,最快的回來,次快和最快過河。
若總人數等於2,則是最快和次快的過河。
若總人數等於1,則最快的過河。
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; inline int read(){ int x=0,f=1,ch=getchar(); while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();} while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();} return x*f; } int a[1005]; int main(){ int T=read(); while(T--){ int n=read(),ans=0; for(int i=1;i<=n;i++) a[i]=read(); sort(a+1,a+1+n); while(n>=4) ans+=min(a[1]+a[2]*2+a[n],a[1]*2+a[n-1]+a[n]),n-=2; if(n==1) ans+=a[1]; if(n==2) ans+=a[2]; if(n==3) ans+=a[1]+a[2]+a[3]; printf("%d\n",ans); } return 0; }
POJ 1700