P5040题解
link & 博客园食用
题面很长,而且说得很玄乎,各种专业术语一大堆。但其实它的意思是不难理解的,简单说来,就是给定一个集合
这样一来就比较清晰了。可以想到既然
要写高精度。卡 long long 的都不是什么好东西。
放一下搜索函数的内容:
//node是高精度结构体
node g[10][N];//记忆化数组
bool vis[10][N];
node f(int wh,int ch){//当前在填第wh个数,且这个数填的是ch
if(wh==m){
node an=newone;
an.num=1;an.a[1]=1;
return an;//到了边界返回1
}
if(vis[wh][ch]==true)return g[wh][ch];//记忆化搜索
int an=0;
for(int i=0;i<n;i++){//枚举那一位可能填的数
g[wh][ch]=g[wh][ch]+f(wh+1,i)*(min(ch,i)+1);
//min(ch,i)+1 相当于是乘法分配律里被提到外面的乘数
//累加即可
}
vis[wh][ch]=true;
return g[wh][ch];//做好记忆化
}