POJ 3188暴搜

来源:互联网 发布:小商店记账软件 编辑:程序博客网 时间:2024/05/18 00:27

题意:
这里写图片描述
这里写图片描述
这里写图片描述

思路:
裸的暴搜 …….

但是要注意如果你不用所有的按键就能输出最优解的话一定要把所有的字母都安排到一个位置….
我的一群PE就是这么来的……

为什么写的人这么少……
这里写图片描述

// by SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int b,l,d,mod=10000007,vis[10000007],rec[66],tot=0,change[66],answer=0,num[10000007],ANS[66];char s[1005][20];void dfs(int x,int used){    if(used==b)    {        int ans=0;        tot++;        for(int i=1;i<=b;i++)            for(int j=rec[i-1]+1;j<=rec[i];j++)                change[j]=i;        for(int j=1;j<=d;j++)        {            int jy=0;            for(int k=1;k<=s[j][0];k++)            {                jy=(jy*l+change[s[j][k]])%mod;            }            if(vis[jy]!=tot)            {                vis[jy]=tot;                ans++;            }            else            {                if(num[jy]!=tot)                {                    num[jy]=tot;                    ans--;                }            }        }        if(answer<=ans&&change[l]==b)        {            answer=ans;            for(int i=1;i<=l;i++)            {                ANS[i]=change[i];            }        }        return;    }    for(int i=x+1;i<=l;i++)    {        rec[used]=i;        dfs(i,used+1);    }}int main(){    scanf("%d%d%d",&b,&l,&d);    rec[b]=l;    for(int i=1;i<=d;i++){        scanf("%s",s[i]+1);        s[i][0]=strlen(s[i]+1);        for(int j=1;j<=s[i][0];j++)            s[i][j]=s[i][j]-'A'+1;    }    dfs(0,1);    printf("%d\n",answer);    for(int i=1;i<=l;i++)    {        printf("%c",i+'A'-1);        if(ANS[i]!=ANS[i+1])puts("");    }}

这里写图片描述

0 0
原创粉丝点击