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
- 难度
- 6
- 标签
- 递交数
- 134
- 已通过
- 45
- 上传者