rt 最近发现不知道分解数咋写了,写了个记忆化却有一个问题不能突破。
比如20可以分解成:
2∗1
2∗2∗5
4∗5
1∗20
我的代码如下
int dfs(int a,int l){
if(s[a]==0)return f[a]=1;
if(f[a])return f[a];
int sum=1;
for(int i=l+(l==1);i<=a-1;i++){
if(a%i==0){
sum*=dfs(a/i,i);
}
}
return f[a]=++sum;
}
这个代码会因为 10 有 1x10 和 2x5 两张情况而把 2x10 时的情况记作 2 个 (2x2x5 , 2x1x10) , 4 因为有 1x4 2x2 两种情况,4x5 时也会记作两个(2x2x5 ,1x4x5),而 2x2x5 出现了两次,导致答案出错,忘了之前是怎么解决的,在这里问问大家 orz