OR120. 游乐园
描述
小明去游乐园玩耍,他的票一共可以玩t分钟。
游乐场一共有n个项目,编号1到n,第i个项目需要a[i]的时间。游乐场规定,在票没有到期前,拥有者都可以入场,无论完成项目出场时该票是否已经过期。
小明可以任意决定玩项目的顺序,但是每个项目他只想玩一次。问小明最长可以玩多久?
输入描述
第一行两个整数n,t,含义如题面,1≤n≤100,1≤t≤10000000;输出描述
输出一个整数,表示小明最长可以玩多久。示例1
输入:
4 12 5 5 5 5
输出:
15
示例2
输入:
4 20 10 10 10 10
输出:
20
C 解法, 执行用时: 2ms, 内存消耗: 348KB, 提交时间: 2020-06-09
#include <stdio.h> #include <stdlib.h> int main(void) { int n, t, k, sum, temp, i, j; int a[100]; scanf("%d %d\n", &n, &t); for(i=0; i<n; i++) { scanf("%d\n", a+i); } //a[i]递增排序 for(i=0; i<n-1; i++) { k = i; for(j=i+1; j<n; j++) { if(a[k]>a[j]) k = j; } temp = a[k]; a[k] = a[i]; a[i] = temp; } sum = 0; for(i=0; i<n; i++) { if((t-sum) > 0) sum += a[i]; else if((t-sum) == 0) { sum += a[n-1] - a[0]; break; } else { sum += a[n-1] - a[i-1]; break; } } printf("%d\n", sum); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 372KB, 提交时间: 2020-07-04
#include<stdio.h> int main() { int n,t,a[100],i,j,k,temp,sum = 0; scanf("%d %d",&n,&t); for(i = 0; i < n; i++) { scanf("%d",&a[i]); } for(i = 0; i < n - 1; i++) { k = i; for(j = i + 1; j < n; j++) { if(a[k] > a[j]) k = j; } temp = a[k]; a[k] = a[i]; a[i] = temp; } for(i = 0; i < n; i++) { if((t - sum ) > 0) { sum = sum + a[i]; } if((t - sum) == 0 || (sum > t)) { break; } if((t - sum) < 0) { sum = sum + a[n-1]; break; } } printf("%d",sum); return 0; }