天天看点

24-题目1436:Repair the Wall

http://ac.jobdu.com/problem.php?pid=1436

#include<stdio.h>
#include<iostream>
#include<fstream>
#include<string>
#include<algorithm>
#include <iomanip> //小数点对齐
using namespace std;

bool cmp(int a, int b)
{
	return a > b;
}
int main()
{
	int l, n;  //l为长度,n为盒子的个数
	ifstream cin("data.txt");
	while (cin >> l >> n)
	{
		int *arr = new int[n];   //arr[i]为每个盒子的长度
		int i, sum = 0;
		for (i = 0; i < n; i++)
			cin >> arr[i];
		sort(arr, arr + n, cmp);    //按盒子长度递减排序

		for (i = 0; i < n; i++)
		{
			if ((sum + arr[i]) < l)
				sum += arr[i];
			else
				break;		
		}
		if (i == n)
			cout << "impossible" << endl;
		else
			cout << i+1 << endl;
	}
	system("pause");
	return 0;
}