独木舟问题

以前一直一位set.end()是代表最后一个元素,原来只是个标记,怪不得一直出错,同时erase在multiset中会删除相同的元素。

本题很明显的greedy,排列后前后两个元素能否组合,不能删除最大元素,再组合,写的比较蠢,不想改了

#include<iostream>
#include<set>
using namespace std;
int main()
{
	int N;
	cin>>N;
	while(N--)
	{
		int w, n;
		cin>>w>>n;
		multiset<int,greater<int> >People;
		int Eachweight;
		for(int i=1;i<=n;i++)
		{
			cin>>Eachweight;
			People.insert(Eachweight);
		}

		int result=0;
		while(People.size()!=0)
		{
			multiset<int>::iterator it=People.begin();
			int tempstart=*it;
			it=--People.end();
			int tempend=*it;
			if((tempstart+tempend<=w))
			{
				result++;
				People.erase(People.begin());
				People.erase(--People.end());
			}
			else
			{
				result++;
				People.erase(People.begin());
			}
		    if(People.size()==1)
		    {
		    	result++;
		    	People.erase(People.begin());

		    }

		}
		cout<<result<<endl;

	}

}

独木舟问题

时间: 2024-08-09 06:21:44

独木舟问题的相关文章

51nod 1432 独木舟 贪心

1432 独木舟 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 n个人,已知每个人体重.独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人.显然要求总重量不超过独木舟承重,假设每个人体重也不超过独木舟承重,问最少需要几只独木舟? Input 第一行包含两个正整数n (0<n<=10000)和m (0<m<=2000000000),表示人数和独木舟的承重. 接下来n行,每行一个正整数,表示每个人的体重.体重不超过100

NYOJ 71 独木舟上的旅行【贪心】

解题思路:给出船的最大载重量w,和n个人,每只船最多可以乘坐两个人,问怎样坐船使得安排的船只的数量最少.这n个人的体重为a1,a2,a3,---,an-1,an首先将体重按升序排列好,再考虑最重的人,如果当前数列中连乘最轻的人都不能和他共乘一只船,那么他就只有一个人乘船了.                                                                 a[i](代表当前最轻的人)           a[j]代表当前最重的人  则j从n开始遍历,

51nod_learn_greedy_独木舟问题

n个人,已知每个人体重.独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人.显然要求总重量不超过独木舟承重,假设每个人体重也不超过独木舟承重,问最少需要几只独木舟? 输入 第一行包含两个正整数n (0<n<=10000)和m (0<m<=2000000000),表示人数和独木舟的承重. 接下来n行,每行一个正整数,表示每个人的体重.体重不超过1000000000,并且每个人的体重不超过m. 输出 一行一个整数表示最少需要的独木舟数. 输入示例 3 6 1 2 3 输出示

独木舟上的旅行--nyoj题目71

独木舟上的旅行 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别.一条独木舟最多只能乘坐两个人,且乘客的总重量不能超过独木舟的最大承载量.我们要尽量减少这次活动中的花销,所以要找出可以安置所有旅客的最少的独木舟条数.现在请写一个程序,读入独木舟的最大承载量.旅客数目和每位旅客的重量.根据给出的规则,计算要安置所有旅客必须的最少的独木舟条数,并输出结果. 输入 第一行输入s,表示测试数据的组数:每组数据的

南阳71(独木舟上的旅行)

独木舟上的旅行 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别.一条独木舟最多只能乘坐两个人,且乘客的总重量不能超过独木舟的最大承载量.我们要尽量减少这次活动中的花销,所以要找出可以安置所有旅客的最少的独木舟条数.现在请写一个程序,读入独木舟的最大承载量.旅客数目和每位旅客的重量.根据给出的规则,计算要安置所有旅客必须的最少的独木舟条数,并输出结果. 输入 第一行输入s,表示测试数据的组数:每组数据的

独木舟上的旅行

题目来自NYOJ 独木舟上的旅行 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别.一条独木舟最多只能乘坐两个人,且乘客的总重量不能超过独木舟的最大承载量.我们要尽量减少这次活动中的花销,所以要找出可以安置所有旅客的最少的独木舟条数.现在请写一个程序,读入独木舟的最大承载量.旅客数目和每位旅客的重量.根据给出的规则,计算要安置所有旅客必须的最少的独木舟条数,并输出结果. 输入 第一行输入s,表示测试数据

NYOJ 71 独木舟上的旅行(贪心)

独木舟上的旅行 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别.一条独木舟最多只能乘坐两个人,且乘客的总重量不能超过独木舟的最大承载量.我们要尽量减少这次活动中的花销,所以要找出可以安置所有旅客的最少的独木舟条数.现在请写一个程序,读入独木舟的最大承载量.旅客数目和每位旅客的重量.根据给出的规则,计算要安置所有旅客必须的最少的独木舟条数,并输出结果. 输入 第一行输入s,表示测试数据的组数:每组数据的

南阳OJ独木舟上的旅行

 /*独木舟上的旅行 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别. 一条独木舟最多只能乘坐两个人,且乘客的总重量不能超过独木舟的最大承载量. 我们要尽量减少这次活动中的花销,所以要找出可以安置所有旅客的最少的独木舟条数. 现在请写一个程序,读入独木舟的最大承载量.旅客数目和每位旅客的重量. 根据给出的规则,计算要安置所有旅客必须的最少的独木舟条数,并输出结果. 输入第一行输入s,表示测试数据的

贪心基础入门讲解四——独木舟问题

n个人,已知每个人体重,独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人.显然要求总重量不超过独木舟承重,假设每个人体重也不超过独木舟承重,问最少需要几只独木舟? 分析: 一个显然的策略是按照人的体重排序. 极端化贪心策略,最重的人要上船——如果最重的人和最轻的人体重总和不超过船的承重,则他们两个占用一条船.否则(因为假设最重的人的体重也不超过船的承重了),最重的人单独占一条船.转变为(n – 1)或者(n – 2)的问题了. 关键在于这种贪心策略是正确的.我们可以证明,最优解也可

贪心入门——独木舟

问题 n个人,已知每个人体重,独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人.显然要求总重量不超过独木舟承重,假设每个人体重也不超过独木舟承重,问最少需要几只独木舟? 输入 第一行包含两个正整数n (0<n<=10000)和m (0<m<=2000000000),表示人数和独木舟的承重. 接下来n行,每行一个正整数,表示每个人的体重.体重不超过1000000000,并且每个人的体重不超过m. 输出 一行一个整数表示最少需要的独木舟数. 输入示例 3 6 1 2 3