#include<bits/stdc++.h>
using namespace std;
int main(){
int a,b,x,y;
scanf("%d %d",&a,&b);
set<int> ss;
for(x=0; a*x <= a*b; x++){
for(y=0; b*y <= a*b; y++){
ss.insert(a*x+b*y);
}
}
int i;
for(i=a*b; i>0; i--){
if(ss.find(i) == ss.end()){
printf("%d",i);
return 0;
}
}
return 0;
}
//ss.find(x) == ss.end() 说明x不在set集合ss中
算法太难了Q_Q,,啊啊啊啊啊
没想到换了输入条件就变成了dp问题了
#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b){
if(b==0) return a;
return gcd(b,a%b);
}//求ab的最大公约数
int main(){
int i,n,g;
scanf("%d",&n);
int a[n];
bool f[10000] = {false};
f[0]=1;
for(i=0;i<n;i++){
scanf("%d",&a[i]);
if(i==0) g=a[i];
else g=gcd(g,a[i]);
for(int j=0; j<10000; j++){
if(f[j]){
f[a[i]+j] = true;
}
}
}
if(g!=1){
printf("INF\n");
}else{
int ans=0;
for(i=0; i<10000 ; i++){
if(!f[i]) ans++;
}
printf("%d",ans);
}
return 0;
}
//a1,a2,a3....必须互质,否则无解
//互质最大公约数为一
求a和b的最大公约数的这个方法挺好,得背一下。
int gcd(int a,int b){
if(b==0) return a;
return gcd(b,a%b);
}//求a,b的最大公约数