2 条题解
-
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; }
-
-1
#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
- 上传者