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

Discuss中的数据全过,但是还是WA,求帮助啊,大神们

Posted by bixiongquan at 2016-04-13 10:09:23 on Problem 1062
简单的递归DFS+邻接矩阵,一直WA,所以也没有剪枝。求变态数据,求帮助啊大神们,实在搞不定了,discuss中的全部数据过了两遍,讨论帖子从头看到尾一篇都没漏,但是还是实在看不出来错误啊。

#include <stdio.h>
#include <string.h>

#define MAXNUM 105
#define MAX 65535

int gwLevelgap; //等级差
int gwMax; //最大物品数
int gwTotal = MAX; //记录最优解
int gawRouteMap[MAXNUM][MAXNUM]; //邻接矩阵,路权为优惠价格
int gawLevel[MAXNUM]; //记录每一个节点的等级
int gawPrice[MAXNUM]; //记录每一个节点的直接购买价格
int gawRecord[MAXNUM]; //记录是否已经交易过,避免形成了环

void GetInput()
{
    int i = 0;
    int j = 0;
    int wPrice = 0;
    int wLevel = 0;
    int wExcNum = 0;
    int wNo = 0;
    int wRoutePrice = 0;
    scanf("%d %d", &gwLevelgap, &gwMax);
    for(i=0; i<gwMax; i++)
    {
        scanf("%d %d %d", &wPrice, &wLevel, &wExcNum);
        gawLevel[i] = wLevel;
        gawPrice[i] = wPrice;
        for(j=0; j<wExcNum; j++)
        {
            scanf("%d %d", &wNo, &wRoutePrice);
            gawRouteMap[i][wNo-1] = wRoutePrice;
        }
    }
}

int CalcPrice(int j, int sum, int maxlevel, int minlevel)
{
    int i = 0;
    int all0flag = 1;
    if(j > gwMax-1)
        return 0;
    if(gawRecord[j] == 1)
    {
        return 1;
    }
    gawRecord[j] = 1;
    if(gawLevel[j] > maxlevel)
        maxlevel = gawLevel[j];
    if(gawLevel[j] < minlevel)
        minlevel = gawLevel[j];
    if(maxlevel - minlevel > gwLevelgap)
    {
        return 1;
    }
    for(i=0; i<gwMax; i++)
    {
        if(gawRouteMap[j][i] != -1)
        {
            if(1 == CalcPrice(i, sum+gawRouteMap[j][i], maxlevel, minlevel))
                if(sum + gawPrice[j] < gwTotal)
                    gwTotal = sum + gawPrice[j];
            if(j == 0)
            {
                memset(gawRecord, 0, MAXNUM*sizeof(int));
                gawRecord[j] = 1;
            }
            all0flag = 0;
        }
    }
    if(all0flag == 1)
    {
        sum += gawPrice[j];
        if(sum < gwTotal)
            gwTotal = sum;
    }
    return 0;
}

int main(void)
{
    memset(gawRouteMap, -1, MAXNUM*MAXNUM*sizeof(int));
    GetInput();
    gwTotal = gawPrice[0];
    CalcPrice(0, 0, gawLevel[0], gawLevel[0]);
    printf("%d\n", gwTotal);

    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