给一个数n,求出 1- n 中所有的各位相乘的最大的值
以 390作为分析
最高位 只可能选 3 或者 2,并且选 2 的话后面的位数可以都选 9,(是不是很像数位dp?) 结果是 2 * 9 * 9 = 162
选3的话第二位可以选9 或者 8 ,依次类推 即可
#include<bits/stdc++.h>
using namespace std;
#define forn(i,n) for(int i = 0;i<int(n);i++)
typedef long long LL;
int n,x,ans ,cnt;
int bit[20];
void dfs(int pos,int tmp,int flag){
if(pos == 0) {
ans = max(ans,tmp);
return ;
}
if(flag) dfs(pos-1,tmp*9,1);
else if(bit[pos] == 1) dfs(pos-1,tmp,1);
else {
dfs(pos-1,tmp * bit[pos],0);
dfs(pos-1,tmp * (bit[pos]-1),1) ;
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
//freopen("data.in","r",stdin);
//freopen("data.out","w",stdout);
cin>>n;
while(n){
bit[++cnt] = n % 10;
n /= 10;
}
dfs(cnt,1,0);
cout<<ans;
return 0;
}