社区讨论

关于数位DP

学术版参与者 4已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@mli378oc
此快照首次捕获于
2026/02/11 21:50
上周
此快照最后确认于
2026/02/11 23:05
上周
查看原帖
蒟蒻最近在学数位DP,上课听教练讲完之后自己做题,但是感觉自己写的东西根本不像数位DP,反而感觉连DP都不是。比如说P4317 花神的数论题,我独立思考后写了一份AC代码:
CPP
#include<iostream>
#define int long long
using namespace std;
const int mod=10000007;
int n,digit[65],top,ans=1,c[65][65];
int quickpow(int base,int exp){
    int tmp=base,ans=1;
    for(int i=0;((long long)1<<i)<=exp;i++){
        if(((long long)1<<i)&exp) (ans*=tmp)%=mod;
        (tmp*=tmp)%=mod;
    }
    return ans;
}
signed main(){
    cin>>n;
    ans=1;
    c[0][0]=1;
    for(int i=1;i<=62;i++){
        for(int j=0;j<=i;j++){
            c[i][j]=c[i-1][j]+c[i-1][j-1];
        }
    }
    while(n){
        digit[++top]=n%2;
        n/=2;
    }
    for(int i=2;i<=top;i++){
        int tmp=i;
        for(int j=top;j>=1;j--){
            if(digit[j]){
                (ans*=quickpow(i,c[j-1][tmp]))%=mod;
                tmp--;
            }
            if(!tmp){
                (ans*=i)%=mod;
                break;
            }
        }
    }
    cout<<ans;
}
这份代码被我改了inf遍才过,而且感觉这根本没用到数位DP吧。
请求各位大佬解答:上面代码的做法到底算不算数位DP?如果不算,我用这种方法上考场遇到数位DP题会不会挂?

回复

6 条回复,欢迎继续交流。

正在加载回复...