【发布时间】:2014-12-29 23:10:53
【问题描述】:
所以我想编写解决这个问题的代码:“Collecting Beepers” 我做到了:
int rec(int current, int beers)
{
if(beers == (1 << (numOfBeers + 1)) - 1) return cost(beerX[0], beerY[0], beerX[current], beerY[current]);
int optimal = 100000;
for(int i = 1; i <= numOfBeers; ++i)
{
if(((1 << i) & beers) == 0)
{
int newBeersSet = (1 << i) | beers;
int c = cost(beerX[current], beerY[current], beerX[i], beerY[i]);
int current = c + rec(i, newBeersSet);
optimal = min(optimal, current);
}
}
return optimal;
}
奇怪的是,当我更换零件时
int c = cost(beerX[current], beerY[current], beerX[i], beerY[i]);
int current = c + rec(i, newBeersSet);
与
int current = cost(beerX[current], beerY[current], beerX[i], beerY[i]) + rec(i, newBeersSet);
逻辑是完全一样的,但是我的程序在相同的输入(问题描述中给出的那个)上崩溃,并且在线法官给出了错误的答案作为程序执行的结果,而它给出的原始代码被接受。有什么想法可能是错误的吗?
【问题讨论】:
-
您是否验证过
cost在rec之前仍被调用? -
到底是哪一行崩溃了?
标签: c++