結果
| 問題 |
No.196 典型DP (1)
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-10-03 21:27:47 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,071 bytes |
| コンパイル時間 | 2,859 ms |
| コンパイル使用メモリ | 279,228 KB |
| 実行使用メモリ | 33,760 KB |
| 最終ジャッジ日時 | 2025-10-03 21:28:05 |
| 合計ジャッジ時間 | 12,198 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | -- * 3 |
| other | AC * 26 TLE * 1 -- * 14 |
ソースコード
// #pragma GCC optimize ("Ofast")
// #pragma GCC optimize ("unroll-loops")
// #pragma GCC target ("avx,avx2,fma")
#include <bits/stdc++.h>
#define rep(i, a, b) for(int i = (a); i <= (b); i ++)
using std::cin, std::cout, std::cerr;
using ll = long long;
const int P = 1e9 + 7;
const int N = 2000 + 1;
ll f[N][N];
int sz[N];
std::vector<int> e[N];
int main() {
std::ios::sync_with_stdio(false);
int n, k; cin >> n >> k;
rep(i, 1, n - 1) {
int u, v; cin >> u >> v;
e[u].push_back(v);
e[v].push_back(u);
}
std::function<void(int, int)> dfs = [&](int x, int p) {
sz[x] = 1;
f[x][0] = f[x][1] = 1;
for(int i : e[x]) if(i != p) {
dfs(i, x);
for(int j = sz[x] + sz[i]; j >= 1; j --)
for(int k = 1; k <= sz[i]; k ++)
if(j >= k + 1) {
f[x][j] += f[x][j - k] * f[i][k];
f[x][j] %= P;
}
sz[x] += sz[i];
}
};
dfs(0, -1);
cout << f[0][n - k] << '\n';
}