10pts求条(AC on #4)
查看原帖
10pts求条(AC on #4)
1284081
haoran150楼主2025/7/19 12:28

"一千个人的代码中有一千个数位DP"
能过样例,但只能过样例

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int len = 20;
int dp[len][len], b[len],x,y;
int dfs(int pos, int state, bool is_max,bool zero){
    if(!pos)  return 1;
    if(!is_max && ~dp[pos][state]) return dp[pos][state];
//    printf("Now it turns to bit %d,with the last number %d",pos,state);
//    if(is_max) puts("(max)");
//    else puts("");
    int end = is_max ? b[pos]:9;
    int ans = 0;
    for(int i=0; i<=end; i++){
        if(zero||abs(i-state)>=2) {
        	ans+=dfs(pos-1, i, is_max&&i==end,zero&&(!i));
		}
//        	printf("bit %d,numder %d!wendy number succeeded\n",pos,i);
		
    }
    if(!is_max) dp[pos][state] = ans;
    return ans;
}
int solve(int a){
	int cnt=0;
	memset(dp,-1,sizeof dp);
	memset(b,0,sizeof b);
//	cout<<a;
	while(a){
		b[++cnt]=a%10;
		a/=10;
	}
//	printf("'s len is %d\n",cnt);
	return dfs(cnt,2233456,1,1);
}
signed main(){
	
	dp[1][1]=1;
	cin>>x>>y;
	cout<<solve(y)-solve(x-1);
	return 0;
}

悬关,求条

2025/7/19 12:28
加载中...