HDU 4389 X mod f(x) (数位DP)

2015-07-20 17:07:05 ? 作者: ? 浏览: 4

?
第一次遇到需要先枚举然后再数位DP的。
先枚举各位数之和,即,1~81,然后数位DP过程中再判断枚举的各位数之和与枚举的数是否相同,只有相同的才算。
dp[i][j][k][h]表示第i位上,当前的各位数和为j,枚举的各位数和为k,当前的数对k取模为h的数的个数。
代码如下:

#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include 
        
          #include
          #include 
          
            #include 
           
             using namespace std; #define LL __int64 #define pi acos(-1.0) const int mod=1e9+7; const int INF=0x3f3f3f3f; const double eqs=1e-9; const int MAXN=200000+10; int dp[11][82][82][82], dig[11]; int dfs(int cnt, int sum, int mods, int res, int maxd) { if(cnt==-1) return sum==mods&&res==0; if(sum>mods) return 0; if(maxd&&dp[cnt][sum][mods][res]!=-1) return dp[cnt][sum][mods][res]; int i, r=maxd?9:dig[cnt], ans=0; for(i=0;i<=r;i++){ ans+=dfs(cnt-1,sum+i,mods,(res*10+i)%mods,maxd||i
            
           
          
        
       
      
     
    
   
-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: