比赛 组合计数1 评测结果 AAAAAATTTT
题目名称 简单的多重背包 最终得分 60
用户昵称 郑霁桓 运行时间 10.625 s
代码语言 C++ 内存使用 3.71 MiB
提交时间 2026-02-26 11:39:49
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,m,dp[100005];
const int M=23333333;
int main(){
    freopen("get_bag.in","r",stdin);
    freopen("get_bag.out","w",stdout);
    cin>>n;
    while(m*m<=n) m++;
    dp[0]=1;
    for(int i=1;i<=n;i++){
        if(i<=m){
            for(int j=n;j>=i;j--){
                for(int k=1;k*i<=j&&k<=i;k++){
                    dp[j]+=dp[j-k*i];
                    if(dp[j]>M) dp[j]-=M;
                }
            }
        }else{
            for(int j=i;j<=n;j++){
                dp[j]+=dp[j-i];
                if(dp[j]>M) dp[j]-=M; 
            }
        }
    }
    cout<<dp[n];
    return 0;
}