UVA # 12186Another Crisis

Description:
slightly

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
const int MAX = 100010;
int T;
vector<int> sub[MAX];//某个员工的直接下属 
int dp(int p){
	if(sub[p].empty())//平民 
		return 1;
	int n = sub[p].size();
	vector<int> d;
	for(int i = 0;i < n; ++i)
		d.push_back(dp(sub[p][i]));
	int k = (n * T - 1) / 100 + 1;//神奇的向上取整方式。
	sort(d.begin(),d.end());
	int sum = 0;
	for(int i = 0;i < k; ++i)
		sum += d[i];
	return sum;
}
int main(){
	int n,i,boss;
	while(scanf("%d%d",&n,&T)){
		if(n == 0 && T == 0)
			break;
		for(i = 0;i <= n; ++i)
			sub[i].clear();
		for(i = 1;i <= n; ++i){
			scanf("%d",&boss);
			sub[boss].push_back(i);	
		}
		printf("%d\n",dp(0));
	}
	return 0;
}

Code from the purple book, why this is also classified as dp.

Published 53 original articles · won praise 0 · Views 713

Guess you like

Origin blog.csdn.net/weixin_38894974/article/details/104715773