b_lq_买不到的数目 & 包子凑数(dp+简单数学分析)

买不到的数目

已知两个包装的数量时,求最大不能组合出的数字。

上限待证明

#include<bits/stdc++.h>
using namespace std;
const int N=1e7;
int f[N];
int main() {
    int n,m,ans=0; cin>>n>>m;
    f[n]=f[m]=1;
    for (int i=max(n,m); i<N; i++) {
        if (f[i-n] || f[i-m]) f[i]=1;
        else ans=i;
    }
    cout<<ans;
    return 0;
}

一开始写的这种,逻辑并不严密,i应该min(n,m)开始

#include<bits/stdc++.h>
using namespace std;
const int N=1e7;
int f[N];
int main() {
    int n,m,ans=0; cin>>n>>m;
    f[n]=f[m]=1;
    int a=min(n,m), b=max(n,m);
    for (int i=a; i<N; i++) {
        if (f[i-a]) f[i]=1;
        else if (i>=b && f[i-b]) f[i]=1;
        else ans=i;
    }
    cout<<ans;
    return 0;
}

包子凑数

原文地址:https://www.cnblogs.com/wdt1/p/13762274.html