算法1
(dp)
C++ 代码
#include<bits/stdc++.h>
using namespace std;
int n,m,res;
bool dp[10000000];//表示该数能否被m和n组成
int main()
{
cin>>n>>m;
int minn=min(n,m),maxx=max(n,m);
dp[0]=dp[minn]=dp[maxx]=true;
for(int i=minn;i<=n*m;i++)//最大不能被组成的数一定小于n*min
//若n*m+k不能被组成 则k一定不能被组成
{
if(dp[i-minn]) dp[i]=true;
else if(i>maxx&&dp[i-maxx]) dp[i]=true;
else
{
res=i;
}
}
cout<<res<<endl;
return 0;
}