51nod 1432 独木舟 贪心
Posted Hyouka
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51nod 1432 独木舟 贪心相关的知识,希望对你有一定的参考价值。
n个人,已知每个人体重。独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人。显然要求总重量不超过独木舟承重,假设每个人体重也不超过独木舟承重,问最少需要几只独木舟?
Input
第一行包含两个正整数n (0<n<=10000)和m (0<m<=2000000000),表示人数和独木舟的承重。 接下来n行,每行一个正整数,表示每个人的体重。体重不超过1000000000,并且每个人的体重不超过m。
Output
一行一个整数表示最少需要的独木舟数。
Input示例
3 6 1 2 3
Output示例
2
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <queue> #include <vector> #include <iomanip> #include <math.h> #include <map> using namespace std; #define FIN freopen("input.txt","r",stdin); #define FOUT freopen("output.txt","w",stdout); #define INF 0x3f3f3f3f #define INFLL 0x3f3f3f3f3f3f3f #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 typedef long long LL; typedef pair<int, int> PII; using namespace std; int n; LL m; LL a[10005]; int vis[10005]; int main() { //FIN while(~scanf("%d%lld", &n, &m)) { for(int i = 1; i <= n; i++) scanf("%lld", &a[i]); sort(a + 1, a + 1 + n); int ans = 0; memset(vis, 0, sizeof(vis)); for(int i = n; i >= 1; i--) { if(vis[i]) continue; ans++; vis[i] = 1; LL tmp = m; tmp -= a[i]; for(int j = n; j >= 1; j--) { if(tmp >= a[j] && !vis[j]) { vis[j] = 1; break; } } } printf("%d\n", ans); } return 0; }
以上是关于51nod 1432 独木舟 贪心的主要内容,如果未能解决你的问题,请参考以下文章