想练习二进制拆分优化,但是0分
查看原帖
想练习二进制拆分优化,但是0分
1189340
aishiteru_mitsu_ha楼主2025/8/3 17:29
#include<bits/stdc++.h>
#define endl "\n"
#define ll long long
#define N 100086
using namespace std;
const int MOD=1e6+7;
int n,m,cnt[N],dp[N];
inline int read();
int main(){
    dp[0]=1;
    n=read();m=read();
    for(int i=1;i<=n;i++) cnt[i]=read();
    for(int i=1;i<=n;i++){
        int pow=1;
        while(cnt[i]>pow){
            for(int j=m;j>=pow;j--){
                dp[j]=(dp[j-pow]+dp[j])%MOD;
            }
            cnt[i]-=pow;
            pow*=2;
        }
        for(int j=m;j>=cnt[i];j--){
            dp[j]=(dp[j-cnt[i]]+dp[j])%MOD;
        }
    }
    cout<<(dp[m]%MOD)<<endl;
    return 0;
}
inline int read(){
    int x=0,f=1;char ch=getchar();
    while (ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=getchar();}
    while (ch>='0'&&ch<='9') {x=x*10+ch-48;ch=getchar();}
    return x*f;
}
2025/8/3 17:29
加载中...