#include<iostream>
#include<iomanip>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
#include<cmath>
#include<cstring>
#include<string>
#include<cstdio>
using namespace std;
struct big{
int g[301];
};
int kk,w;
big s[30011],f[30011],cnt;
big operator +=(big a,big b){
for(int i=1;i<=201;i++){
a.g[i]+=b.g[i];
}
cout<<endl;
for(int i=1;i<=201;i++){
a.g[i+1]+=a.g[i]/10;
a.g[i]%=10;
}
return a;
}
big operator -(big a,big b){
for(int i=1;i<=201;i++){
a.g[i]=b.g[i];
}
return a;
//cout<<a.g[1]<<" "<<b.g[1]<<endl;
}
big operator ==(big a,int b){
for(int i=1;i<=200;i++)a.g[i]=b;
return a;
}
int main(){
//freopen("brackets.in","r",stdin);
//freopen("brackets.out","w",stdout);
cin>>kk>>w;
int p=w/kk+bool(w%kk);
if(w%kk==0){
for(int i=1;i<(1<<kk);i++)s[i]==1;
for(int i=2;i<=p;i++){
for(int j=1;j<(1<<kk);j++){
for(int k=j+1;k<(1<<kk);k++){
f[j]+=s[k];
//cout<<f[j].g[1]<<" ";
}
//cout<<endl;
cnt+=f[j];
}
for(int j=1;j<(1<<kk);j++){
s[j]-f[j],f[j]==0;
}
}
for(int i=1;i<=2;i++)cout<<cnt.g[i];//
}
else{
p-=1;
for(int i=1;i<(1<<kk);i++)s[i]==1;
//for(int i=1;i<(1<<kk);i++)cout<<s[i].g[1]<<" ";
//cout<<endl;
for(int i=2;i<=p;i++){
for(int j=1;j<(1<<kk);j++){
for(int k=j+1;k<(1<<kk);k++){
f[j]+=s[k];
}
cnt+=f[j];
}
for(int j=1;j<(1<<kk);j++){
s[j]-f[j],f[j]==0;
}
}
int q=w-(w/kk*kk);
for(int i=1;i<(1<<q);i++){
for(int j=i+1;j<(1<<kk);j++){
f[i]+=s[j];
}
cnt+=f[i];
}
for(int i=1;i<=2;i++)cout<<cnt.g[i];//
}
return 0;
}
递推部分没问题,重载运算符不知为什么就不对了,求助各位,帮着看看!!