2020 年百度之星·程序设计大赛 - 初赛一 Drink

Problem Description
我们有 nn 种不同的饮料,每种饮料有无限多瓶,第 ii 种饮料一瓶提供 x[i]x[i] 毫升的水分,包含 y[i]y[i] 卡路里。

现在我们需要选择一种饮料一直喝,直到补充了至少 mm 毫升的水分,我们想使得摄入的卡路里总和最小。请求出这个最小值。

一旦打开一瓶饮料,就一定要喝完。

Input
第一行一个整数 test(1 \le test \le 100)test(1≤test≤100) 表示数据组数。

对于每组数据,第一行两个整数 n, m(1 \le n \le 100, 1 \le m \le 10000)n,m(1≤n≤100,1≤m≤10000)。

接下来 nn 行,每行两个整数 x[i], y[i](1 \le x[i], y[i] \le 100)x[i],yi。

Output
对于每组数据,一行一个整数表示答案。

Sample Input
2
1 10
3 3
2 10
3 3
2 1
Sample Output
12
5

solution

太久没写题了,,题目看错了好几遍。。。(只能喝同一瓶饮料系列)
中午没睡好困,,脑子糊糊的。。。(开始还以为是贪心,,算了单位毫升的卡路里量排序取最小。。。but因为是正瓶喝所以有些刚刚喝到数值的可能总卡路里更小)
直接暴力枚举就好啦。。。

codes

#include
#include
using namespace std;
int main(){
	int T;  cin>>T;
	while(T--){
		int n, m, ans = (int)1e9;
		cin>>n>>m;
		for(int i = 1; i <= n; i++){
			int x, y; cin>>x>>y;
			if(m%x==0)ans = min(ans, m/x*y);
			else ans = min(ans,(m/x+1)*y);
		}
		cout<<ans<<"\n";
	}
	return 0;
}

你可能感兴趣的:(NOIP)