1 条题解

  • 1
    @ 2025-6-21 16:32:23

    如果你知道怎么做球同,盒同,可空这道题,那么你就一定会做这道题。

    题目约束每个盒的球必须为奇数(即 2n+1,nN2n+1, n \in N ),不妨对每个盒的球数减一再除以二(即 n,nNn, n \in N),这个过程等价于 n=nk2n=\frac{n-k}{2} ,由此问题转化为“球同,盒同,可空”。

    code:

    #include<bits/stdc++.h>
    #define int long long
    #define mod 1000000007
    using namespace std;
    int f[4090][4090];
    int n,k;
    signed main(){
    	cin>>n>>k;
    	n-=k;
    	if(n&1){//判无解
    		cout<<0;
    		return 0;
    	}
    	n>>=1;
    	for(int i=0;i<=k;i++)f[0][i]=1;
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=k;j++){
    			f[i][j]+=f[i][j-1],f[i][j]%=mod;
    			if(i>=j)f[i][j]+=f[i-j][j],f[i][j]%mod;
    		}
    	}
    	cout<<f[n][k]%mod;
    	return 0;
    } 
    
    
    • 1

    信息

    ID
    283
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    7
    已通过
    2
    上传者