#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的最大公约数
本文通过两个具体的编程实例,介绍了如何使用C++解决数学问题的方法。首先展示了一个寻找不能由两个正整数线性组合表示的最大数的程序;其次,通过动态规划解决了特定条件下无法达到的目标数的问题,并讲解了求最大公约数的有效算法。
1673

被折叠的 条评论
为什么被折叠?



