我们有 n种不同的饮料,每种饮料有无限多瓶,第 i 种饮料一瓶提供 x[i]毫升的水分,包含 y[i] 卡路里。现在我们需要选择一种饮料一直喝,直到补充了至少 m 毫升的水分,我们想使得摄入的卡路里总和最小。请求出这个最小值。一旦打开一瓶饮料,就一定要喝完。
Input
第一行一个整数 test(1 <= test <= 100)表示数据组数。
对于每组数据,第一行两个整数 n,m(1≤n≤100,1≤m≤10000)。
接下来 n 行,每行两个整数 x[i],y[i] (1≤x[i],y[i]≤100)。
Output
对于每组数据,一行一个整数表示答案。
Sample Input
2
1 10
3 3
2 10
3 3
2 1
Sample Output
12
5
#include<iostream>usingnamespace std;intmain(){int test,n,m,x,y;
cin >> test;while(test--){
cin >> n >> m;int min =99999999;for(int i=0;i<n;i++){
cin >> x >> y;int t,temp= m /x;if(temp * x != m)
temp++;
t = temp * y;if(t < min)
min = t;}
cout << min << endl;}return0;}
GPA
Problem Description
小沃沃一共参加了 4 门考试,每门考试满分 100 分,最低 0 分,分数是整数。
给定四门考试的总分,请问在最优情况下,四门课绩点的和最高是多少?
分数与绩点之间的对应关系如下:
95~100 4.3
90~94 4.0
85~89 3.7
80~84 3.3
75~79 3.0
70~74 2.7
67~69 2.3
65~66 2.0
62~64 1.7
60~61 1.0
0~59 0
Input
第一行一个正整数test(1≤test≤401) 表示数据组数。 接下来 test行,每行一个正整数 x 表示四门考试的总分 (0≤x≤400)。
接下来 n 行,每行 n 个整数,第 i 行第 j 列的整数表示 a[i] [j] (1≤a[i] [j]≤3)。
Output
对于每组数据,一行一个整数表示答案。
Sample Input
1
10 9 8
1 2 2 1 2 3 1 1 2 1
2 1 3 3 3 2 3 2 3 1
1 1 3 1 1 3 2 2 1 2
3 1 3 1 3 3 1 3 1 3
3 2 3 1 3 1 2 2 2 1
2 3 2 3 2 2 3 1 2 3
3 1 3 3 2 2 3 2 3 3
1 3 3 2 3 2 2 2 1 1
3 3 1 2 3 2 1 2 1 2
1 1 3 1 3 1 1 1 3 3
Sample Output
39
#include<bits/stdc++.h>usingnamespace std;constint maxn =1e6+7;int n , x , y , a[501][501];intjudge(int x,int y){if(x>=1&& x<=n && y>=1&& y<=n)return1;return0;}intSolve(int x,int y){int Tong[4]={0};for(int i =max(1,x-3);i<=min(n,x+3);i++){for(int j=max(1,y-3);j<=min(n,y+3);j++){if(abs(i-x)+abs(j-y)<=3){
Tong[a[i][j]]++;}}}int ans =0, Food =0, Power = a[x][y];
Tong[a[x][y]]--;for(int i=1;i<=8;i++){int x =max(0,(8*i*i - Food + Power -1)/ Power);
ans += x;
Food += x * Power;for(int j=3;j>=1;j--){if(Tong[j]){
Power += j;
Tong[j]--;break;}}}return ans;}intmain(){int T;scanf("%d",&T);while(T--){scanf("%d%d%d",&n,&x,&y);for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){scanf("%d",&a[i][j]);}}int ans =1e9+7;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){int Time =(abs(i-x)+abs(j-y)+1)/2+Solve(i,j);
ans =min(ans , Time);}}printf("%d\n",ans);}return0;}
看了各位大神的代码,结合了大神们的算法思想和我的一点小改动,以下算是题解吧,大家可以稍作参考!DrinkProblem Description我们有 n种不同的饮料,每种饮料有无限多瓶,第 i 种饮料一瓶提供 x[i]毫升的水分,包含 y[i] 卡路里。现在我们需要选择一种饮料一直喝,直到补充了至少 m 毫升的水分,我们想使得摄入的卡路里总和最小。请求出这个最小值。一旦打开一瓶饮料,就一定要喝完。Input第一行一个整数 test(1 <= test <= 100)表示数据组数。对于