BZOJ4521&&洛谷P4124 [CQOI2016]手机号码

搜索大法好

代码比较清楚就不细讲了,为了避免前导零,我们直接枚举第一位就行了

代码

//By AcerMo
#include
#include
#include
#include
#include
#define lli long long int
using namespace std;
lli num[12];
lli f[11][11][11][2][2][2][2];
inline lli dfs(int p,int l1,int l2,bool can,bool jud,bool l4,bool l8)
{
	//l1倒数第二位,l2倒数第一位,can之前有没有连续的三个相同数字,l4->4出没出现过,l8同理 
    if(l4&&l8) return 0;
    if(p<=0) return can;
    if (f[p][l1][l2][can][jud][l4][l8]!=-1) return f[p][l1][l2][can][jud][l4][l8];
    lli emm=!jud?num[p]:9,ans=0;
    for(int i=0;i<=emm;i++)
    ans+=dfs(p-1,i,l1,can||(i==l2&&i==l1),jud||(i>l>>r;slove(l-1,r);
    return 0;
}

 

你可能感兴趣的:(动态规划,爆搜)