3 条题解
- 
  1
#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; } - 
  -2
#include <iostream> #include<bits/stdc++.h> using namespace std; int n,k; int a[25]; int cnt; void dfs(int step, int last, int sum){ if(sum==0){ if(step==k+1) cnt++; return ; } if(step>k) return; if(sum<k-step+1) return; for(int i=last; i<=sum; i++) dfs(step+1,i,sum-i); } int main(){ cin>>n>>k; dfs(1,1,n); cout<<cnt; return 0; } 
- 1
 
信息
- ID
 - 364
 - 时间
 - 1000ms
 - 内存
 - 512MiB
 - 难度
 - 5
 - 标签
 - 递交数
 - 141
 - 已通过
 - 50
 - 上传者