算法1
思路:这个题其实是一个公式
C++ 代码
#include<iostream>
using namespace std;
int main()
{
int p,q;
cin>>p>>q;
printf("%d\n",(p-1)*(q-1)-1);//公式
return 0;
}
算法2
思路:爆搜
C++ 代码
#include<iostream>
using namespace std;
int res=0;
bool dfs(int m,int p,int q)
{
if(!m)return true;//m表示凑不出的最大数,如果这个数不存在,直接返回
if(m>=p &&dfs(m-p,p,q)) return true;//如果这个最大的数存在,让它减p,去递归
if(m>=q && dfs(m-q,p,q)) return true;//同上
return false;
}
int main()
{
int p,q;
cin>>p>>q;
for(int i=1;i<1000;i++)
{
if(!dfs(i,p,q))res=i;//从1开始枚举
}
cout<<res<<endl;
return 0;
}