Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
贴一下代码QwQ#include <iostream> #include <vector> #include <algorithm> #include <climits> #define MAXN (150 + 5) using namespace std; int total[MAXN], n, p, dp[MAXN][MAXN], root = 1; vector<int> son[MAXN]; int search(int x) { total[x] = 1; for (size_t i = 0;i < son[x].size();++i) total[x] += search(son[x][i]); dp[x][1] = son[x].size(); for (size_t i = 0;i < son[x].size();++i) { int s = son[x][i]; for (int j = total[x];j >= 1;--j) for (int k = 1;k < j && k <= total[s];++k) dp[x][j] = min(dp[x][j], dp[x][j - k] + dp[s][k] - 1); } return total[x]; } int main(int argc, char *argv[]) { cin >> n >> p; for (int i = 0;i < n - 1;++i) { int f, s; cin >> f >> s; son[f].push_back(s); } memset(dp, 0x7F, sizeof(dp)); search(root); int ans = INT_MAX; for (int i = 1;i <= n;++i) ans = min(ans, dp[i][p] + ((i == root) ? 0 : 1)); cout << ans << endl; return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator