hdu 4389

数位DP

状态记录非常麻烦

#include
#include
#define N 91
using namespace std;
int n;
int dp[11][N][N][N];//位数,各位和,模,余数
int tmp[11],ten[11];
void init(){
    int i,mod,res,sum,now;
    ten[0]=1;
    for(i=1;i<=10;i++)
        ten[i]=ten[i-1]*10;
    memset(dp,0,sizeof(dp));
    for(i=1;i<=90;i++)
        dp[0][0][i][0]=1;
    for(i=0;i<=9;i++)
        for(mod=1;mod<=90;mod++)
            dp[1][i][mod][i%mod]=1;
    for(i=2;i<=10;i++)
        for(mod=1;mod<=90;mod++)
            for(sum=0;sum<=90;sum++)
                for(now=0;now<=sum && now<=9;now++)
                    for(res=0;res=1;i--){  //从高位开始
            for(j=0;j



你可能感兴趣的:(dp)