P4163 [SCOI2007]排列

——————————————————————————————————————————————————————————-

发出不适的粗口

被循环变量坑了half hour

用余数来记录选用当前的数所构成的形态,算是附加信息。

还要练练搜索的说

————————————————————————————————————————————————————————

#include<bits/stdc++.h>
using namespace std;
int t,num[20],len,md,cnt[10],f[1050][1010];
char ch[20];
int main()
{
cin>>t;
while(t--)
{
memset(cnt,0,sizeof(cnt));memset(f,0,sizeof(f));
cin>>ch>>md;len=strlen(ch);f[0][0]=1;
for(int i=1;i<=len;i++){num[i]=ch[i-1]-'0';cnt[num[i]]++;}
for(int i=0;i<=(1<<len)-1;i++)
for(int j=1;j<=len;j++)if(!(i&(1<<j-1)))
for(int k=0;k<md;k++)f[i^(1<<j-1)][((10*k)+num[j])%md]+=f[i][k];
int ans=f[(1<<len)-1][0];
for(int i=0;i<=9;i++)for(int j=2;j<=cnt[i];j++)ans/=j;
cout<<ans<<endl;
}
}

猜你喜欢

转载自www.cnblogs.com/SFWR-YOU/p/11297313.html