51NOD 1432 独木舟

探讨了在给定人数及独木舟承重的情况下,如何通过贪心算法确定最少所需独木舟数量的问题。文章提供了详细的算法思路及AC代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基准时间限制:1 秒 空间限制:131072 KB 分值: 10  难度:2级算法题
n个人,已知每个人体重。独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人。显然要求总重量不超过独木舟承重,假设每个人体重也不超过独木舟承重,问最少需要几只独木舟?
Input
第一行包含两个正整数n (0<n<=10000)和m (0<m<=2000000000),表示人数和独木舟的承重。
接下来n行,每行一个正整数,表示每个人的体重。体重不超过1000000000,并且每个人的体重不超过m。
Output
一行一个整数表示最少需要的独木舟数。
Input示例
3 6
1
2
3
Output示例
   2
题解:简单贪心,排序之后从第N个找第一个,两者小于称重就同时往里找,大于称重说明第N个必须自己走,那么就找第N-1个和第一个,依次下去。
AC代码:
 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 const int maxn = 10005;
 5 long long a[maxn];
 6 int n;
 7 long long k;
 8 int main()
 9 {
10     cin>>n>>k;
11     for(int i=1;i<=n;i++)
12     {
13         cin>>a[i];
14     }
15     sort(a+1,a+1+n);
16     int t = 1;
17     int h = n;
18     int sum = 0;
19     while(t<=h)
20     {
21         if(a[h]+a[t]<=k)
22         {
23             sum++;
24             h--;
25             t++;
26         }
27         else
28         {
29             sum++;
30             h--;
31         }
32     }
33     cout<<sum<<endl;
34     return 0;
35 }

 

转载于:https://www.cnblogs.com/sortmin/p/8016913.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值