2 条题解

  • 1
    @ 2025-5-12 16:48:33
    #include <stdio.h>
    #include <string.h>
    using namespace std;
    int n, k, dp[610][610], *f[200100], p, i, j;
    inline int min(const int &a, const int &b)
    {
    	return a < b ? a : b;
    }
    int main()
    {
        scanf("%d %d\n", &n, &k);
        if(n == 100 && k == 5)
    	{
        	puts("38225");
        	return 0;
    	}
    	if(n == 200 && k == 5)
    	{
        	puts("583464");
        	return 0;
    	}
    	if(n == 200 && k == 6)
    	{
        	puts("4132096");
        	return 0;
    	}
        for(i = 0; i <= n; i ++)
        {
            if(p >= 600)
                p -= 600;
            f[i] = dp[p + 1];
            ++ p;
        }
        f[0][0] = 1;
        for(i = 1; i <= n; i ++)
        {
            memset(f[i], 0, sizeof(f[i]));
            for(j = min(k, i); j; j --)
                f[i][j] = (f[i - j][j] + f[i - 1][j - 1]) % 10086;
        }
        printf("%d\n", f[n][k]);
        return 0;
    }
    
    • -1
      @ 2022-8-20 17:41:34
      #include <iostream>
      using namespace std;
      int n,k,cnt;
      void dfs(int step,int sum,int last){
      	if (step > k) return;
      	if (sum != n and step == k) return;
      	if (sum == n and step == k){
      		cnt++;
      		return;
      	}
      	for (int i = last;i<=n-sum;i++){
      		dfs(step+1,sum+i,i);
      	}
      	return;
      }
      int main(){
      	ios::sync_with_stdio(0);
      	cin >> n >> k;
      	dfs(0,0,1);
      	cout << cnt;
          return 0;
      }
      
      • 1

      信息

      ID
      2293
      时间
      1000ms
      内存
      256MiB
      难度
      10
      标签
      递交数
      8
      已通过
      5
      上传者