您的位置:首页 > 其它

51nod_1432_独木舟

2018-02-01 14:44 351 查看

51nod_1432_独木舟

思维题

题目链接

题目描述

n个人,已知每个人体重。独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人。显然要求总重量不超过独木舟承重,假设每个人体重也不超过独木舟承重,问最少需要几只独木舟?


Input

第一行包含两个正整数n (0<n<=10000)和m (0<m<=2000000000),表示人数和独木舟的承重。接下来n行,每行一个正整数,表示每个人的体重。体重不超过1000000000,并且每个人的体重不超过m。


Output

一行一个整数表示最少需要的独木舟数。


Input示例

3 6
1
2
3


Output示例

2


解题思路

对人的重量w[]从小到大排序,i从前往后遍历,j从后往前遍历,直到会和,
w[i]+w[j]>m:给重的分配一个船,因为它不可能和其他人一起坐船了
w[i]+w[j]<=m:给两个人分配一个船
i==j:分配一个船,因为题目要求每个人的重量不超过船重


AC代码

#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
int main() {
int n;
ll m;
ll w[10005];
while (cin >> n >> m) {
for (int i = 0; i < n; ++i) {
cin >> w[i];
}
sort(w, w + n);
int ans = 0;
for (int i = 0,j=n-1; i<=j;) {
if (i == j) {
i++;
j--;
ans++;
}
else if (w[i] + w[j] > m) {
j--;
ans++;
}
else if (w[i] + w[j] <= m) {
i++;
j--;
ans++;
}
}
cout << ans << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: