UVa 12186 - Another Crisis(树形DP)

来源:互联网 发布:c语言中字符串处理函数 编辑:程序博客网 时间:2024/06/08 03:48

书上给出了思路和DP部分的代码,其他的就很简单了。

#include<cstdio>#include<vector>#include<algorithm>using namespace std;const int maxn=100010;int n,t;vector<int> sons[maxn];int dp(int u){    if(sons[u].empty()) return 1;    int k=(int)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)){        if(!n&&!t) break;        for(int i=0;i<=n;++i) sons[i].clear();        for(int i=1;i<=n;++i){            int k;            scanf("%d",&k);            sons[k].push_back(i);        }        printf("%d\n",dp(0));    }    return 0;}
0 0
原创粉丝点击