Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

DFS 0MS AC 注释详细

Posted by laoyang103 at 2011-08-27 11:12:46 on Problem 1062
#include <stdio.h>
struct Thing
{
	short idx;//代替物品索引
	int truecost;//找到代替物品之后的价格
};
struct Node
{
	int worth;//此人持有物品的价格
	short lv;//此人等级
	short sum;//此人的替代品数量
	struct Thing inside[102];//替代品数组
};
struct Node data[102] = {0};//数据
bool foot[102] = {0};//访问标记数组
int m,n;//最大差距  人数
int dfs(int tobuy,int lvmin,int lvmax)//要买的那件物品  当前交易过的人的最小等级和最大等级
{
	if(0 == data[tobuy].sum)//如果没有替代品
		return data[tobuy].worth;
	int i,j,k;
	int min = data[tobuy].worth;//首先认为不用替代品
	int tempmin = min;
	for(i =1;i<=data[tobuy].sum;i++)//对于这个人的没一件替代品
	{
		int temp1 = lvmin,temp2 = lvmax;//中间变量 便于回溯
		if(lvmax == 10000)//如果是第一次 将最大最小等级初始化
			temp1 = temp2 = lvmax = lvmin = data[tobuy].lv;
		if(data[data[tobuy].inside[i].idx].lv<lvmin)//如果持有第i件替代品的主人等级小于当前最小等级 则更新
			temp1 = data[data[tobuy].inside[i].idx].lv;
		if(data[data[tobuy].inside[i].idx].lv>lvmax)//如果持有第i件替代品的主人等级大于当前最大等级 则更新
			temp2 = data[data[tobuy].inside[i].idx].lv;
		if(lvmax == 10000 || !foot[tobuy] && temp2-temp1<=m)//如果是第一次 或者 此人没有被交易并且更新后的等级查满足要求
		{
			foot[tobuy] = true;//标记为访问
			//去买第i件替代品  返回他的最小价格
			tempmin = data[tobuy].inside[i].truecost + dfs(data[tobuy].inside[i].idx,temp1,temp2);
			foot[tobuy] = false;//回溯
			if(tempmin < min)
			{
				min = tempmin;
			}
		}
	}
	return min;//返回买第tobuy件物品的最小价格
}
int main()
{
	while(EOF != scanf("%d%d",&m,&n))
	{
		int i,j,k;
		for(i = 1;i<=n;i++)
		{
			scanf("%d%d%d",&data[i].worth,&data[i].lv,&data[i].sum);
			for(j = 1;j<=data[i].sum;j++)
			{
				scanf("%d%d",&data[i].inside[j].idx,&data[i].inside[j].truecost);
			}
		}		
		printf("%d\n",dfs(1,-10000,10000));
	}
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator