[AcWing] 買不到的數目

買不到的數目

題目

小明開了一家糖果店。

他別出心裁:把水果糖包成4顆一包和7顆一包的兩種。

糖果不能拆包賣。

小朋友來買糖的時候,他就用這兩種包裝來組合。

當然有些糖果數目是無法組合出來的,比如要買 10 顆糖。

你可以用計算機測試一下,在這種包裝情況下,最大不能買到的數量是17。

大於17的任何數字都可以用4和7組合出來。

本題的要求就是在已知兩個包裝的數量時,求最大不能組合出的數字。

輸入格式

兩個正整數 n,m,表示每種包裝中糖的顆數。

輸出格式

一個正整數,表示最大不能買到的糖數。

數據範圍

2n,m10002≤n,m≤1000 , 保證數據一定有解。

輸入樣例

4 7

輸出樣例

17

題解一(TLE報錯)

思路

  • 遍歷打表
#include <iostream>

using namespace std;

bool dfs(int x, int p, int q) {
    if (!x) return true;
    if (x >= p && dfs(x - p, p, q)) return true;
    if (x >= q && dfs(x - q, p, q)) return true;
    return false;
}

int main () {
    int n, m, res;
    cin >> n >> m;
    for (int i = 1; i <= 1e3; i ++) 
        if (!dfs(i, n, m)) 
            res = i;
    
    cout << res;
    return 0;
}

題解二

思路

  • 數學規律:如果 a,b 均是正整數且互質,那麼由 ax+by,x0,y0ax+by,x≥0,y≥0 不能湊出的最大數是 (a1)(b1)1(a−1)(b−1)−1
#include <iostream>

using namespace std;

int main () {
    int n, m, res;
    cin >> n >> m;
    cout << (n - 1) * (m - 1) - 1;
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章