题目描述:有x个数你有n个选择 每个选择会减少d个数,然后增加h个数(当前的数数不小于0),可以任意选择,并输出总共最少的次数
分析:选择收获最大的那一组,并且找出一次减的最多的那一组
ad代码:
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
int a,b,x,n,mx1,mx2;
//int solve(int cur,int cnt){
//    if(cur<=mx2)return cnt+1;
//    if(cur%a==0) return solve(cur/a*(b-1)+a,cnt+cur/a-1);
//    return solve(cur%a+cur/a*b,cnt+cur/a);
//}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    int t;
    cin>>t;
    while(t--){
//        int n,x;
        int cnt=0x3f3f3f3f;
        mx1=-1000000000,mx2=-1;
        cin>>n>>x;
        while(n--){
            int a1,b1;
            cin>>a1>>b1;
            if(mx1<a1-b1)a=a1,b=b1,mx1=a1-b1;
            mx2=max(mx2,a1);
        }
        if(x<=mx2)cout<<1<<endl;
        else if(mx1<=0) cout<<-1<<endl;
        else {
            cout<<1+(int)ceil((x-mx2)*1.0/mx1)<<endl;
        }
    }
}