洛谷 【P1252】马拉松接力赛
生活随笔
收集整理的這篇文章主要介紹了
洛谷 【P1252】马拉松接力赛
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
洛谷 【P1252】馬拉松接力賽
題目描述
某城市冬季舉辦環城25km馬拉松接力賽,每個代表隊有5人參加比賽,比賽要求每個的每名參賽選手只能跑一次,一次至少跑1km、最多只能跑10km,而且每個選手所跑的公里數必須為整數,即接力的地方在整公里處。
劉老師作為學校代表隊的教練,精心選擇了5名長跑能手,進行了訓練和測試,得到了這5名選手盡力連續跑1km、2km、…、10km的所用時間。現在他要進行一個合理的安排,讓每個選手跑合適的公里數,使學校代表隊跑完25km所用的時間最短。根據隊員的情況,這個最短的時間是惟一的,但安排方案可能并不惟一。
根據測試情況及一般運動員的情況得知,連續跑1km要比連續跑2km速度快,連續跑2km又要比連續跑3km速度快……也就是說連續跑的路程越長,速度越慢,當然也有特殊的,就是速度不會變慢,但是絕不可能變快。
輸入輸出格式
輸入格式:
?
5行數據,分別是1到5號隊員的測試數據,每行的10個整數,表示某一個運動員盡力連續跑1km、2km、…、10km所用的時間。
?
輸出格式:
?
兩行,第一行是最短的時間,第二行是五個數據,分別是1到5號隊員各自連續跑的公里數。
?
輸入輸出樣例
輸入樣例#1:?復制 333 700 1200 1710 2240 2770 3345 3956 4778 5899 300 610 960 1370 1800 2712 3734 4834 5998 7682 298 612 990 1540 2109 2896 3790 4747 5996 7654 289 577 890 1381 1976 2734 3876 5378 6890 9876 312 633 995 1407 1845 2634 3636 4812 5999 8123 輸出樣例#1:?復制 9905 6 5 5 4 5思路:裸的貪心 難度:普及-
#include<algorithm> #include<cstdio> #define M 10 using namespace std; int a[M+1], b[M+1], c[M+1], d[M+1], e[M+1]; int minn = 1000000, sum; int x, y, z, p, q; int main() {for(int i = 1; i <= M; i++) scanf("%d", &a[i]);for(int i = 1; i <= M; i++) scanf("%d", &b[i]);for(int i = 1; i <= M; i++) scanf("%d", &c[i]);for(int i = 1; i <= M; i++) scanf("%d", &d[i]);for(int i = 1; i <= M; i++) scanf("%d", &e[i]);for(int i = 1; i <= M; i++)for(int j = 1; j <= M; j++)for(int k = 1; k <= M; k++)for(int s = 1; s <= M; s++)for(int t = 1; t <= M; t++) {sum = a[i]+b[j]+c[k]+d[s]+e[t];if(sum<minn && i+j+k+s+t==25) {minn = sum;x=i, y=j, z=k, p=s, q=t;}}printf("%d\n", minn);printf("%d %d %d %d %d", x, y, z, p, q);return 0; } 弱智般的30分暴力 #include<cstdio> #include<iostream> #define INF 2147483647 using namespace std; int minx = INF, flag, ans; int a[5][11], b[5][11], c[5]; int main() {c[0] = c[1] = c[2] = c[3] = c[4] = 1;for(int i = 0; i < 5; i++)for(int j = 1; j < 11; j++) {cin >> a[i][j];b[i][j] = a[i][j]-a[i][j-1];}for(int i = 0; i < 20; i++) {minx = INF;for(int j = 0; j < 5; j++)if(b[j][c[j]+1] < minx && c[j]+1 <= 10) {flag = j;minx = b[j][c[j]+1];}c[flag]++;}for(int i = 0; i < 5; i++) ans+=a[i][c[i]];printf("%d\n%d %d %d %d %d\n",ans,c[0],c[1],c[2],c[3],c[4]);return 0; } 正解
轉載于:https://www.cnblogs.com/v-vip/p/8544541.html
總結
以上是生活随笔為你收集整理的洛谷 【P1252】马拉松接力赛的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dijkstra 最短路
- 下一篇: linux下创建用户及组