第一题就调了1个小时。。。
数满足条件:范围内约数最多,在相同约数下最小
反思:1.影响较大的剪枝不能偷懒。。
2.注释取值范围
3 .判断最大情况下是否超int
#includeusing namespace std;typedef long long LL;LL ans=0,x;int used[12],Exp[12][30],N,myn=0;int pri[12]={ 0,2,3,5,7,11,13,17,19,23,29,31};//pn:到第几个质数 yn:约数个数 nows:大小 void dfs(int pn,int yn,LL nows){ if(pn>11)return; if(yn>myn) {myn=yn;ans=nows;} if(yn==myn&&ans>nows) ans=nows; for(int i=1;i<=used[pn-1];i++) { used[pn]=i; x=nows*Exp[pn][i]; if(x>N)break; dfs(pn+1,yn*(i+1),x); }} void getExp(){ LL x; for(int i=1;i<12;i++) { x=1; for(int j=1;j<30;j++) { x*=pri[i];if(x>2000000000)break; Exp[i][j]=(int)x; } }}int main(){ memset(used,0,sizeof(used)); memset(Exp,0,sizeof(Exp)); used[0]=29; getExp(); cin>>N; dfs(1,1,1); cout< <