1 条题解
-
0
C++ :
#include <cstdio> #include <algorithm> using namespace std; /* 每趟最多 2 人过河、时间取较慢者;氧气瓶要送回。 经典策略:先排序。每次把最慢的两人送过去,两种方案取小。 */ int t[1005]; int main(){ int n; if(scanf("%d",&n)!=1) return 0; for(int i=0;i<n;i++) scanf("%d",&t[i]); sort(t,t+n); if(n<=0){ printf("0\n"); return 0; } if(n==1){ printf("%d\n", t[0]); return 0; } long long cost=0; int m=n; while(m>3){ long long a=(long long)t[0]+2LL*t[1]+t[m-1]; // 最快的两人来回 long long b=2LL*t[0]+t[m-1]+t[m-2]; // 最快的人每次带一个 cost += a<b?a:b; m-=2; } if(m==3) cost += (long long)t[0]+t[1]+t[2]; else if(m==2) cost += t[1]; printf("%lld\n", cost); return 0; }
- 1
信息
- ID
- 2851
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者