首页 新闻 会员 周边

一道C++编程题,求大神帮忙解答

1
悬赏园豆:50 [待解决问题]

题目描述:

小明去游乐园玩耍,他的票一共可以玩t分钟。

游乐场一共有n个项目,编号1到n,第i个项目需要a[i]的时间。游乐场规定,在票没有到期前,拥有者都可以入场,无论完成项目出场时该票是否已经过期。

小明可以任意决定玩项目的顺序,但是每个项目他只想玩一次。问小明最长可以玩多久?

输入

 

第一行两个整数n,t,含义如题面,1≤n≤100,1≤t≤10000000;

接下来一行n个整数,第i个整数a[i]表示第i个项目所需的时间,1≤a[i]≤100。

输出

输出一个整数,表示小明最长可以玩多久。

样例输入

4 12

5 5 5 5

样例输出

15

Hint
补充样例:
输入样例:
4 20
10 10 10 10
输出样例:
20
Dragonir的主页 Dragonir | 初学一级 | 园豆:136
提问于:2017-09-20 19:57
< >
分享
所有回答(4)
-2

把项目时间排序,然后用从小到大的顺序选择项目。

当到最后一个可选项目的时候,选择耗时最多的项目。

asahi86 | 园豆:242 (菜鸟二级) | 2017-09-21 10:50
0
 1         //每个项目的总分钟数
 2             List<int> listint = new List<int>() {6,4,2,3,1,5 };
 3             listint= listint.OrderByDescending(t=>t).ToList();
 4             //项目个数
 5             int sum = listint.Count();
 6             //可以玩的分钟数
 7             int minutes = 10;
 8             minutes -= 1;//要使玩的分钟数最大,所以得给最大的项目留出一分钟出来
 9             //玩项目的总分钟
10             int summin = listint[0];
11             for (int i = 1; i < sum; i++)
12             {
13                 if (minutes >= listint[i])
14                 {
15                     summin += listint[i];
16                     minutes -= listint[i];
17                 }
18             }
19             Console.WriteLine(summin);
Smile灬Lucky | 园豆:163 (初学一级) | 2017-09-21 14:08
-2

先去看一下 0-1背包 算法就明白了

MyCPlusPlus | 园豆:43 (初学一级) | 2017-09-27 09:42
0

#include <iostream.h>
int main()
{
int n,t;
int sum=0;
cout<<"请输入游乐场项目数n和游玩时间t"<<endl;
cin>>n>>t;
int a[100];
cout<<"请输入每个项目所需要的时间"<<endl;
for(int i=0;i<n;i++)
cin>>a[i];
while(sum<t) /*要求最长时间,即从时间长度最短的依次开始*/
{
int min=a[0];
for(i=1;i<n;i++)
{
if(a[i]>min)
min=a[i];
}
sum=sum+min;
}
cout<<"最长时间="<<sum<<endl;
return 0;
}

hellodanna | 园豆:202 (菜鸟二级) | 2017-10-16 19:38

不好意思,弄反了!!

求最长时间应该从时间长度最长的依次开始

支持(0) 反对(0) hellodanna | 园豆:202 (菜鸟二级) | 2017-10-16 19:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册