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;
}