国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

NYOJ47 過河問題

2019-11-11 02:58:40
字體:
來源:轉載
供稿:網友

題目: 過河問題 時間限制:1000 ms | 內存限制:65535 KB 難度:5 描述 在漆黑的夜里,N位旅行者來到了一座狹窄而且沒有護欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。不幸的是,N個人一共只帶了一只手電筒,而橋窄得只夠讓兩個人同時過。如果各自單獨過橋的話,N人所需要的時間已知;而如果兩人同時過橋,所需要的時間就是走得比較慢的那個人單獨行動時所需的時間。問題是,如何設計一個方案,讓這N人盡快過橋。

輸入 第一行是一個整數T(1<=T<=20)表示測試數據的組數 每組測試數據的第一行是一個整數N(1<=N<=1000)表示共有N個人要過河 每組測試數據的第二行是N個整數Si,表示此人過河所需要花時間。(0

#include<stdio.h> #include<algorithm> using namespace std; int main() { int t; int a[1005]; scanf("%d",&t); while(t--) { int sum=0; int n; scanf("%d",&n); for(int i=0; i<n; i++) scanf("%d",&a[i]); sort(a,a+n); while(n>=4) { if(2*a[1]+a[0]+a[n-1]<a[n-1]+a[n-2]+2*a[0]) sum+=2*a[1]+a[0]+a[n-1]; else sum+=a[n-1]+a[n-2]+2*a[0]; n-=2; } if(n==1) sum+=a[0]; else if(n==2) sum+=a[1]; else if(n==3) sum+=a[1]+a[0]+a[2]; 示例代碼:

#include<stdio.h> #include<algorithm> using namespace std; int a[1005]; int main() { int T, n, i; scanf("%d",&T); while(T--) { scanf("%d",&n); for(i = 0; i < n; i++) scanf("%d",&a[i]); sort(a,a+n); int sum = 0; while(n >= 4) { if((a[1] * 2 + a[n-1] + a[0]) > (2 * a[0] + a[n-1] + a[n-2])) { //求出最長的兩個人過橋所用的最短時間 sum += a[n-1]; //用時最短的和用時最長的一起過去 sum += a[0]; //用時最短的回來 sum += a[n-2]; //用時最短的和用時第二長的一起過去 sum += a[0]; //用時最短的回來 } else { sum += a[1]; //最短的和第二短的一起過去 sum += a[0]; //最短的回來 sum += a[n-1]; //最長的和第二長的一起過去 sum += a[1]; //第二短的回來 } n -= 2; } if(n == 3) sum += a[1] + a[0] + a[2]; else if(n == 2) sum += a[1]; else sum += a[0]; printf("%d/n",sum); } return 0; }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 石嘴山市| 当阳市| 丹凤县| 蒙自县| 土默特左旗| 舒城县| 丹东市| 建水县| 申扎县| 乌拉特后旗| 吴桥县| 如东县| 桦川县| 衡南县| 定边县| 南岸区| 南陵县| 满城县| 萨迦县| 鄄城县| 正安县| 偏关县| 广东省| 龙州县| 嘉黎县| 贵南县| 大足县| 北海市| 西宁市| 教育| 溧阳市| 西平县| 大理市| 南澳县| 家居| 遵义市| 资阳市| 马公市| 丹阳市| 呼伦贝尔市| 衢州市|