北大oj 1694 An Old Stone Game
2014-12-11 19:52
323 查看
题意分析:
这道题是说:现在有一颗树,从其叶子节点处开始放石子,一个节点只能放一个。当这棵树的某个节点的孩子都被放上石子后,可以把孩子节点上的石子拿走,父亲节点上放一个石子。以此类推,直到根节点处放一个石子。现在给你一个篮子,让你装石子,问最少要装多少个石子才能做到这一点。因为这是一棵树,所以可以设第i个节点有孩子节点k个,每个孩子节点所需的最少石子数为num1,num2.....numk,对此排序。该节点的某一个孩子节点所需的最大石子数为max,然后该孩子节点处放一个石子,还剩下val=max-1个,然后在比较第二大孩子节点石子数,如果大于等于,则val
= val -1;如果小于,则 val = 第二大孩子节点石子数-1;以此递归下去。边界判断条件是 如果该点是叶子节点,则返回1.
代码如下:
这道题是说:现在有一颗树,从其叶子节点处开始放石子,一个节点只能放一个。当这棵树的某个节点的孩子都被放上石子后,可以把孩子节点上的石子拿走,父亲节点上放一个石子。以此类推,直到根节点处放一个石子。现在给你一个篮子,让你装石子,问最少要装多少个石子才能做到这一点。因为这是一棵树,所以可以设第i个节点有孩子节点k个,每个孩子节点所需的最少石子数为num1,num2.....numk,对此排序。该节点的某一个孩子节点所需的最大石子数为max,然后该孩子节点处放一个石子,还剩下val=max-1个,然后在比较第二大孩子节点石子数,如果大于等于,则val
= val -1;如果小于,则 val = 第二大孩子节点石子数-1;以此递归下去。边界判断条件是 如果该点是叶子节点,则返回1.
代码如下:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<vector> using namespace std; vector<int> ve[205]; int a[205]; int f(int index) { if(ve[index][1] == 0) return 1; int i,b[205],j=0; for(i=2; i<ve[index].size(); i++) { b[j++] = f(ve[index][i]); } sort(b,b+j); int val=b[j-1]; for(i=j-1; i>=0; i--) { if(val >= b[i]) val--; else val = b[i] - 1; } return val+ve[index][1]; } int main() { int t,n,i; cin>>t; while(t--) { cin>>n; for(i=0; i<=n; i++) ve[i].clear(); int q,w; for(i=1; i<=n; i++) { cin>>q>>w; ve[i].push_back(q); ve[i].push_back(w); int k=2; for(int j=0; j<w;j++) { cin>>q; ve[i].push_back(q); } } /*for(i=1; i<=n; i++) for(int j=0; j<ve[i].size(); j++) cout<<ve[i][j]<<' '; cout<<endl; */ cout<<f(1)<<endl; } return 0; }
相关文章推荐
- ZOJ1427 POJ1694 An Old Stone Game
- poj 1694 An Old Stone Game 树形dp
- POJ 1694 An Old Stone Game ★(排序+树+递归)
- POJ 1694 An Old Stone Game ★(排序+树+递归)
- POJ 1694 An Old Stone Game【递归+排序】
- POJ 1694 An Old Stone Game【递归+排序】
- POJ 1694 An Old Stone Game 笔记
- 1694 An Old Stone Game
- poj 1694 An old stone game
- poj 1694 An Old Stone Game 树形dp
- POJ--1694--An Old Stone Game
- An Old Stone Game(poj1694模拟与排序)
- POJ 1694 An Old Stone Game
- POJ_1694_An Old Stone Game
- POJ 1694 An Old Stone Game
- 【poj1694】 An Old Stone Game
- POJ 1694 An Old Stone Game
- POJ 1738 An old Stone Game(石子合并 经典)
- poj 1738 An old Stone Game(区间dp 合并石子问题直线型)
- poj1738 An old Stone Game 石子合并(归并) GarsiaWachs算法