【CF 1015】C. Songs Compression

原题地址:http://codeforces.com/contest/1015/problem/C

题意:有n首歌,想要存放到U盘里,每首歌都有压缩前和压缩后的体积ai,bi,U盘的最大容量为m,求把所有歌放进U盘所需压缩最少的次数。

使用结构体记录每首歌压缩前的体积与压缩后的体积x,y,以及体积的差值c,对差值进行排序。求出未压缩总体积后依次减去最大的差值,直到体积小于m。压缩后总体积仍大于m的情况特判。

代码:

#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
struct ac
{
	ll x,y,c;            //数据会爆int,使用long long
}a[100005];
bool cmp(ac x,ac y)
{
	return x.c>y.c;
}
int main()
{
	int i;
	ll n,m,s=0,sum=0;
	cin>>n>>m;
	for(i=0;i<n;i++)
	{
		cin>>a[i].x>>a[i].y;
		a[i].c=a[i].x-a[i].y;
		s+=a[i].x;
		sum+=a[i].y;
	}
	if(sum>m)
	{
		cout<<"-1"<<endl;
		return 0;
	}
	sort(a,a+n,cmp);
	i=0;
	while(s>m)
	{
		s-=a[i].c;
		i++;
	}
	cout<<i<<endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/Xylon_/article/details/81504366