方法一:
通过打表找规律,打表我不会借鉴y总的代码
#include <iostream>
using namespace std;
//给定一个m,是否能用p和q凑出来
bool dfs(int m,int p,int q)
{
if(m == 0) return true;
if(m >= p && dfs(m - p,p,q)) return true;
if(m >= q && dfs(m - q,p,q)) return true;
return false;
}
int main()
{
int p,q;
cin >> p >> q;
int res = 0;
for(int i = 1; i <= 1000;i ++)
{
if(!dfs(i,p,q))
{
res=i;
}
}
cout << res << endl;
return 0;
}
结论:
最大的买不到数目为(a-1)*(b-1)-1
数组dp:
代码:
#include<iostream>
using namespace std;
const int N=1e6+10;
int dp[N];
int main(){
int m,n;
cin>>m>>n;
int mi=min(m,n);
int ma=max(m,n);
dp[0]=true;
int ans=1;
for(int i=mi;i<=m*n;i++){
if(dp[i-mi])
dp[i]=true;
else if(i>=ma&&dp[i-ma])
dp[i]=true;
else{
ans=i;
}
}
cout<<ans<<endl;
return 0;
}