hdu 3652 数位DP+dfs记忆化搜所

来源:互联网 发布:战支援部队网络系统部 编辑:程序博客网 时间:2024/06/05 10:17

题目:点击打开链接

题意:求小于n且是13的倍数而且含有'13'.

参考这个:点击打开链接

#include <iostream>#include <string>#include <string.h>#include <algorithm>using namespace std;int bit[15],dp[15][15][3];int dfs(int pos,int mod,int have,int lim){    int num,i,ans,mx,hx;    if(pos<=0)        return mod==0&&have==2;    if(!lim&&dp[pos][mod][have]!=-1)        return dp[pos][mod][have];    ans=0;    num=lim?bit[pos]:9;    for(i=0;i<=num;i++)    {        mx=(mod*10+i)%13;        hx=have;        if(have==0&&i==1)            hx=1;        if(have==1&&i!=1)            hx=0;        if(have==1&&i==3)            hx=2;        ans+=dfs(pos-1,mx,hx,lim&&i==num);    }    if(!lim)        dp[pos][mod][have]=ans;    return ans;}int main(){    int n,len;    while(cin>>n)    {        memset(bit,0,sizeof(bit));        memset(dp,-1,sizeof(dp));        len=0;        while(n){            bit[++len]=n%10;            n/=10;        }      cout<<dfs(len,0,0,1)<<endl;    }    return 0;}


0 0
原创粉丝点击