UVA 12186 - Another Crisis(树形DP)

来源:互联网 发布:mac怎么关掉程序快捷键 编辑:程序博客网 时间:2024/04/27 23:37

这个题 真难读懂。 


题目还是很简单的。队友每一个领导 都要找出他的员工的最小的人数。 这是一个最基本的子问题 然后递归就OK。


#include <cstdio>#include <algorithm>#include <iostream>#include <cstring>#include <cmath>#include <cstdlib>#include <string>#include <map>#include <vector>#include <set>#include <queue>#include <stack>using namespace std;#define ll long long#define maxn 100000+10#define INF 1<<30vector <int> sons[maxn];int n,t;int dp(int u){    if(sons[u].empty()) return 1;    int k = sons[u].size();    vector <int> d;    for(int i = 0; i < k ; i++){        d.push_back(dp(sons[u][i]));    }    sort(d.begin(),d.end());    int c = (k*t - 1) / 100 + 1;    int ans = 0;    for(int i = 0; i < c; i++)        ans += d[i];    return ans;}int main (){    while(scanf("%d%d",&n,&t) != EOF){        if(n == 0 && t ==0)            break;        for(int i = 1; i <= n; i++){            int num;            scanf("%d",&num);            sons[num].push_back(i);        }        int co = dp(0);        printf("%d\n",co);        for(int i = 0; i <= maxn; i++)                sons[i].clear();    }    return 0;}


0 0
原创粉丝点击