ZOJ1427 POJ1694 An Old Stone Game

原创 2012年03月21日 19:25:17

很简单的递归题。注意记录下节点子节点需要的石子数,然后从最大开始排列,取第一个为需要的石头数,遍历记录,如果余下的石头不足以支付,则需要补充。


/*******************************************************************************
 # Author : Neo Fung
 # Email : neosfung@gmail.com
 # Last modified: 2012-03-21 19:27
 # Filename: ZOJ1427 POJ1694 An Old Stone Game.cpp
 # Description : 
 ******************************************************************************/
#ifdef _MSC_VER
#define DEBUG
#define _CRT_SECURE_NO_DEPRECATE
#endif

#include <fstream>
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <string>
#include <limits.h>
#include <algorithm>
#include <math.h>
#include <numeric>
#include <functional>
#include <ctype.h>
#define MAX 210
using namespace std;

int children[MAX][MAX];

int func(const int &r)
{
	int array[MAX];
	if(children[r][0]==0)
		return 1;
	int cnt=0;
	while(children[r][cnt])
	{
		array[cnt]=func(children[r][cnt]);
		++cnt;
	}
	sort(array,array+cnt,greater<int>());
	int ans=array[0],tmp=array[0]-1;
	for(int i=1;i<cnt;++i)
		if(tmp<array[i])
		{
			ans+=(array[i]-tmp);
			tmp=array[i]-1;
		}
		else
			--tmp;
	return ans;
}

int main(void)
{
#ifdef DEBUG  
  freopen("../stdin.txt","r",stdin);
  freopen("../stdout.txt","w",stdout); 
#endif  

	int n,ncases,parent,tmp;
	scanf("%d",&ncases);

	while(ncases--)
	{
		scanf("%d",&n);
		memset(children,0,sizeof(children));
		for(int i=0;i<n;++i)
		{
			scanf("%d%d",&parent,&tmp);
			for(int j=0;j<tmp;++j)
				scanf("%d",&children[parent][j]);
		}

		int ans=func(1);
		printf("%d\n",ans);
	}

  return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

HDU3567:Eight II(康拓展开+预处理)

Problem Description Eight-puzzle, which is also called "Nine grids", comes from an old game.  ...
  • libin56842
  • libin56842
  • 2014年07月21日 16:32
  • 3290

Poj-3922 A simple stone game(博弈,k倍动态减法)

Poj-3922 A simple stone game 博弈,k倍动态减法详解
  • u012628310
  • u012628310
  • 2014年05月02日 21:12
  • 1725

poj 1738 An old Stone Game(此题数小则可用区间DP,数较大用一维数组或者GarsiaWachs算法),待续

1、http://poj.org/problem?id=1738 2、题目大意: 有n堆石头排成一条直线 ,每堆石头的个数已知,现在要将这n堆石头合并成一堆,每次合并只能合并相邻的两堆石头,代价就...
  • sdjzping
  • sdjzping
  • 2014年02月17日 19:20
  • 1911

POJ1694 An Old Stone Game

/* POJ1694 An Old Stone Game 仍未透彻理解其算法思想啊啊啊啊 题意:有一棵古老的树,树有各种叉,目标是在树根上放一个石头。 有k个石头在桶里面,每次将一个石头放到树叶上,对...
  • huatian5
  • huatian5
  • 2016年06月23日 16:20
  • 368

POJ1694 An Old Stone Game (树,排序) .

An Old Stone Game 这道题看了好几遍,又看了看别人给的数据才看明白。意思就是现在有一棵树,有一些石头,依次把石头放在树叶上,如果一个节点的叶子节点全有一个石头了,就可以把它们的石头去掉...
  • guomei
  • guomei
  • 2011年07月24日 21:40
  • 606

poj 1694 An old stone game

#include #include #include #include #include #include using namespace std; class node{ public: int ...
  • u010936800
  • u010936800
  • 2013年07月19日 08:11
  • 511

POJ 1694 An Old Stone Game

题目: 有一个古老的石头游戏,该游戏基于任意一棵树T,游戏的目标是在树T的根节点上放一颗石头,游戏的规则如下: 1 游戏开始前,玩家先将K个石头放入桶中。 2 在游戏的每一步,玩家从桶中拿一颗石...
  • lijiecsu
  • lijiecsu
  • 2012年04月09日 12:16
  • 1213

1694 An Old Stone Game

#include #include #include #include using namespace std; #define MaxSize 201 int MinNum[MaxSi...
  • a330416020
  • a330416020
  • 2011年03月01日 18:45
  • 403

poj 1738 An old Stone Game(此题数小则可用区间DP,数较大用一维数组或者GarsiaWachs算法),待续

1、http://poj.org/problem?id=1738 2、题目大意: 有n堆石头排成一条直线 ,每堆石头的个数已知,现在要将这n堆石头合并成一堆,每次合并只能合并相邻的两堆石头,代价就...
  • sdjzping
  • sdjzping
  • 2014年02月17日 19:20
  • 1911

ZOJ3452 Doraemon's Stone Game

Doraemon's Stone Game Time Limit: 2 Seconds      Memory Limit: 65536 KB Doraemon is playing a game...
  • wust_xhj
  • wust_xhj
  • 2015年07月29日 23:55
  • 210
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ZOJ1427 POJ1694 An Old Stone Game
举报原因:
原因补充:

(最多只允许输入30个字)