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

Re:各种测试数据 都过了,就是wa,求反例~

Posted by hu_wu at 2013-05-29 16:54:37 on Problem 1062
In Reply To:各种测试数据 都过了,就是wa,求反例~ Posted by:hu_wu at 2013-05-22 16:38:36
> #include <iostream>
> using namespace std;
> 
> typedef int INT;
> typedef bool BOOL;
> typedef char CHAR;
> typedef double DOUBLE;
> typedef float FLOAT;
> typedef double D64;
> typedef unsigned int U32;
> typedef unsigned short int U16;
> typedef unsigned char U8;
> 
> #define MaxGoods 100
> 
> INT Out;
> INT levelLow,levelHigh,LevelLimit;
> 
> typedef struct
> {
> 	U8 identifier;
> 	INT discountPrice;
> 
> }Succedaneum;
> typedef struct
> {
> 	INT price;//该物品的价值
> 	INT level;//物品主人的等级
> 	INT tmpShortest;//求最短路径过程的临时变量
> 	INT shortest;//该节点到到酋长节点的最短路径,可以不考虑 代码中没有用
> 	U8 outdegree;
> 	BOOL isVisited;
> 	Succedaneum target[MaxGoods];//由改物品可以换得的物品
> }BridePrice;//物品节点
> 
> BOOL isInLevelLimit(INT level)
> {
> 	if((levelLow - level) * (levelLow - level) > LevelLimit * LevelLimit)
> 		return false;
> 	if((levelHigh - level) * (levelHigh - level) > LevelLimit * LevelLimit)
> 		return false;
> 	return true;
> }
> 
> void getShortest(U16 currentPrice,BridePrice *pBridePrice,U8 index,U8 sumOfgoods)
> {
> 	U8 i,j,bIdx = 0xff,tIdx = 0xff;
> 	U32 tmpBridge = 0 - 1;
> 	BridePrice *bridePrice = pBridePrice + index;
> 
> 	if(bridePrice ->level < levelLow)
> 		levelLow = bridePrice ->level;
> 	if(bridePrice ->level > levelHigh)
> 		levelHigh = bridePrice ->level;
> 
> 	if( index == 0)
> 	{
> 		if(currentPrice < Out)
> 			Out = currentPrice;
> 		return;
> 	}
> 	bridePrice->isVisited = true;
> 	bridePrice->tmpShortest = currentPrice;
> 	for(i = 0;i < sumOfgoods;i++)
> 	{
> 		if(pBridePrice[i].isVisited == true)
> 			for(j = 0;j < pBridePrice[i].outdegree;j++)
> 			{
> 				if(pBridePrice[pBridePrice[i].target[j].identifier].isVisited == false)
> 					if(pBridePrice[i].tmpShortest + pBridePrice[i].target[j].discountPrice < tmpBridge
> 						&& isInLevelLimit(pBridePrice[pBridePrice[i].target[j].identifier].level))
> 					{
> 						tmpBridge = pBridePrice[i].tmpShortest + pBridePrice[i].target[j].discountPrice;
> 						bIdx = i;
> 						tIdx = pBridePrice[i].target[j].identifier;
> 					}
> 			}
> 	}
> 	if(bIdx != 0xff && tIdx != 0xff)
> 		getShortest(tmpBridge,pBridePrice,tIdx,sumOfgoods);
> }
> 
> int main()
> {
> 	INT levelLimit;
> 	INT sumOfgoods;
> 	INT sumOfsuccedaneum,identifier,discountPrice;
> 	U32 result = 0;
> 	BridePrice *bridePrice;
> 	INT i,j;
> 
> 	scanf("%d%d",&levelLimit,&sumOfgoods);
> 	bridePrice = new BridePrice[sumOfgoods];
> 	for(i = 0;i < sumOfgoods;i++)
> 	{
> 		bridePrice[i].isVisited = false;
> 		bridePrice[i].outdegree = 0;
> 		bridePrice[i].tmpShortest = bridePrice[i].shortest = 0;
> 	}
> 
> 	for(i = 0;i < sumOfgoods;i++)
> 	{
> 		scanf("%d%d%d",&bridePrice[i].price,&bridePrice[i].level,&sumOfsuccedaneum);
> 
> 		for(j = 0;j < sumOfsuccedaneum;j++)
> 		{
> 			scanf("%d%d",&identifier,&discountPrice);
> 			identifier --;
> 			bridePrice[identifier].target[ bridePrice[identifier].outdegree ].identifier = i;
> 			bridePrice[identifier].target[ bridePrice[identifier].outdegree ].discountPrice = discountPrice;
> 			bridePrice[identifier].outdegree ++;
> 		}
> 	}
> 
> 	Out = bridePrice[0].price;
> 	LevelLimit = levelLimit;
> 
> 	for(i = 1;i < sumOfgoods;i++)
> 	{
> 		levelLow = levelHigh =  bridePrice[0].level;
> 
> 		getShortest(bridePrice[i].price,bridePrice,i,sumOfgoods);
> 
> 		bridePrice[i].shortest = Out;
> 		for(j = 0;j < sumOfgoods;j++)
> 		{
> 			bridePrice[j].isVisited = false;
> 			bridePrice[j].tmpShortest = 0;
> 		}
> 	}
> 
> 	printf("%d\n",Out);
> }

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