Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
各种测试数据 都过了,就是wa,求反例~#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: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator