请问这两份代码在 x=0 的部分有无本质区别?
查看原帖
请问这两份代码在 x=0 的部分有无本质区别?
544446
Demon_master楼主2022/10/16 21:02
inline void dfs(){
    int s=++tot;
    int t=read_int(),x=read_int();
    // cout<<s<<" "<<t<<" "<<x<<endl;
    if(x==0){
        int son1=tot+1,son2;
        dfs();son2=tot+1;dfs();
        for(int i=n;i>=t*2;i--){
            for(int e=2*t;e<=i;e++){
                dp[s][i]=max(dp[s][i],dp[son1][i-e]+dp[son2][e-2*t]);
            }
        }
    }
    else{
        for(int i=1;i<=x;i++) sj[i][0]=read_int(),sj[i][1]=read_int();
        for(int k=1;k<=x;k++){
            for(int i=n;i>=sj[k][1]+t*2;i--){
                dp[s][i]=max(dp[s][i],dp[s][i-sj[k][1]]+sj[k][0]);
            }
        }
    }
}
inline void dfs(){
    int s=++tot;
    int t=read_int(),x=read_int();
    // cout<<s<<" "<<t<<" "<<x<<endl;
    if(x==0){
        int son=tot+1;
        dfs();
        for(int i=n;i>=t*2;i--){
            for(int e=t*2;e<=i;e++){
                dp[s][i]=max(dp[s][i],dp[s][i-e]+dp[son][e-2*t]);
            }
        }
        son=tot+1;
        dfs();
        for(int i=n;i>=t*2;i--){
            for(int e=t*2;e<=i;e++){
                dp[s][i]=max(dp[s][i],dp[s][i-e]+dp[son][e-2*t]);
            }
        }
        // cout<<s<<endl;
        // for(int i=n;i>=1;i--) cout<<"dp["<<s<<"]["<<i<<"]"<<dp[s][i]<<endl;
    }
    else{
        // cout<<s<<endl;
        for(int i=1;i<=x;i++) sj[i][0]=read_int(),sj[i][1]=read_int();
        for(int k=1;k<=x;k++){
            for(int i=n;i>=sj[k][1]+t*2;i--){
                dp[s][i]=max(dp[s][i],dp[s][i-sj[k][1]]+sj[k][0]);
            }
        }
    }
}
2022/10/16 21:02
加载中...