1269 小B的任务Ⅶ

1269 小B的任务Ⅶ

题目描述

钱终于收齐了(但是小B似乎把奖励忘了),小B总算可以清静的过一天了,于是便跑去图书馆看书.但是由于还未专业分流,而且对钱途很迷茫,所以他决定只要是书就看,但是呢图书馆的书那么多,所以他决定挑几个书架看(小B能一目万行),但是她又想看很多的书,请帮她算算最多能看多少书(最后一本书不一定要看完)。假设有n(0<n<=16)个书架,看同一个书架上的书,耗时相等。

输入要求

小B看书的时间T. 书架数n. 接下来n行,每行两个正整数,在看一本书花费的时间t和该书架的书的总数m.

输出要求

小B最多能看的书的数量.

测试数据

100
5
1 10
2 10
3 10
4 10
5 10

40

AC代码

过的人比较少,所以我记录下

#include <bits/stdc++.h>
using namespace std;
struct Book
{
	int cost,num;
}book[10005];
bool cmp(Book a,Book b)
{
	return a.cost<b.cost;
}
int main() {
	int t,sum=0,n;
	cin>>t>>n;
	for(int i=0;i<n;i++) cin>>book[i].cost>>book[i].num;
	sort(book,book+n,cmp);
	for(int i=0;i<n;i++)
	{
		if(t<=0) break;
		if(book[i].cost*book[i].num<=t) 
		{
			t-=book[i].cost*book[i].num;
			sum+=book[i].num;
		 } 
		else 
		{
			if(t%book[i].cost==0)  sum+=t/book[i].cost;
			else sum+=t/book[i].cost+1;
			t=0;
		}
	}
	cout<<sum<<endl;
	return 0;
}
原文地址:https://www.cnblogs.com/xxhao/p/14317118.html