• 网易互娱2017实习生招聘游戏研发工程师在线笔试第二场 C


    偶尔碰到这题,简单数位DP题,然而我已生疏了……

    这次算是重新想到的,看来对DP的理解有增进了……

    dp[i][j][k],表示前i为,mod为j,是否出现2、3、5的剩下的数位可组成的数字。答案就是dp[len][0][0]

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    
    using namespace std;
    
    #define LL long long 
    
    LL dp[20][7][2];
    int num[20];
    
    
    LL dfs(int len, int mod, bool one, int show, bool flag){
    	if(len == 0){
    		if(show == 1 && mod == 0){
    			dp[len][mod][show] = 1;
    		}
    		else dp[len][mod][show] = 0;
    		return dp[len][mod][show];
    	}
    	if(!flag && dp[len][mod][show] != -1) return dp[len][mod][show];
    	
    	int up = flag ? num[len]:9;
    	LL ans = 0, tmp = show;
    	
    	for(int i = 0; i <= up ; i++){
    		if(one && i == 8) continue;
    		if(i == 2 || i == 3 || i == 5) tmp = (show | 1);
    	//	cout <<" tmp = " << tmp << endl;
    		ans += dfs(len - 1, (mod * 10 + i)%7, i == 1?true:false, tmp, (flag && i == up) ? true: false);
    		tmp = show;
    	//	printf("%I64d====%d
    ", ans, i);
    		
    	}
    	dp[len][mod][show] = ans;
    	return ans;
    	
    }
    
    
    
    long long slove(LL n){
    	
    	int len = 0;
    	LL tmp = n;
    	while(tmp){
    		num[++len] = tmp % 10;
    		tmp /= 10;
    	}
    	
    //	printf("%I64d
    ", n);
    	
    	dfs(len, 0, false, 0, true);
    	
    	return dp[len][0][0];
    	
    	
    }
    
    int main(){
    	long long l, r;
    	int T;
    	scanf("%d", &T);
    	while(T--){
    		memset(dp, -1, sizeof(dp));
    		scanf("%I64d%I64d", &l, &r);
    		printf("%I64d
    ", slove(r) - slove(l - 1));
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    deque-size
    deque-size
    deque-resize
    Android4.4——SurfaceFlinger启动
    关于linux signal 6 (SIGABRT)
    (OK) 编译ANDROID
    compile android: depmod: ERROR: Found 2 modules in dependency cycles!
    Fedora 25正式发布:工作站版默认启用Wayland显示服务器
    running ANDROID
    (3/4 OK) 在VirtualBox中运行 cm-13-kiwi (华为 荣耀 5X)
  • 原文地址:https://www.cnblogs.com/jie-dcai/p/5785469.html
Copyright © 2020-2023  润新知