rt,思路是选 Ai≤N 并且 AiBi 最大的操作,如果能选出,一直操作到 N<Ai 为止,重复以上步骤;如果不能选出,则喝完剩下 N 瓶汽水,结束。
在atcoder上AC * 38 WA *2。
提交链接
代码:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll N;
ll M,a[200000 + 5],b[200000 + 5];
int main () {
ios::sync_with_stdio (false);
cin >> N >> M;
for (int i = 1;i <= M;i ++ ){
cin >> a[i] >> b[i];
}
ll ans = 0;
a[0] = 5000;
while (1){
int id = 0;
for (int i = 1;i <= M;i ++) {
if (a[i] > N) continue ;
if (b[i] * a[id] > a[i] * b[id])
id = i;
else if (b[i] * a[id] == a[i] * b[id] && a[i] < a[id])
id = i;
}
if (id == 0 || N == 0) {
ans += N;
break ;
}
while (N >= a[id]) ans += N/a[id]*a[id],N = N%a[id]+N/a[id]*b[id];
}
cout << ans ;
return 0;
}