北大 POJ 1062 昂贵的聘礼 用C++语言 怎么解?

#include
using namespace std;

struct Comm{
unsigned short price;
short dv;
short num;
};
Comm goods[111];

unsigned short succ[111][111];
short menu[111][111];
int price_min,dv_max,dv_min;

void good_min(int good_id,int good_price){
int i;
int temp_id,temp_price,lujing;
for (i = 0;i < goods[good_id].num;i++) {
temp_id = menu[good_id][i];
if (good_price <= price_min && goods[temp_id].dv <= dv_max && goods[temp_id].dv >= dv_min){
temp_price = good_price + succ[good_id][temp_id] + goods[temp_id].price;
price_min = price_min < temp_price ? price_min : temp_price;
lujing = good_price + succ[good_id][temp_id];
good_min(temp_id,lujing);
}
}
return;
}

int main(){
int limit,tot;
int i,j;
int temp_id,temp_price;
cin >> limit >> tot;
for (i = 1;i <= tot;i++) {
cin >> goods[i].price >> goods[i].dv >> goods[i].num;
for (j = 0;j < goods[i].num;j++) {
cin >> menu[i][j] >> temp_price;
temp_id = menu[i][j];
succ[i][temp_id] = temp_price;
}
}
price_min = goods[1].price;
dv_max = goods[1].dv + limit;
dv_min = goods[1].dv - limit;
good_min(1,0);
cout << price_min << endl;
return 0;
}

这段代码哪里有问题?用计算机运行了一下结果是正常的,但是北大网站一直提示错误,具体错在哪里?

1个回答

dv_max = goods[1].dv + limit;
dv_min = goods[1].dv - limit;

这里出错了,根据题意应该枚举[dv-limit, dv] ... [dv, dv+limit] 这limit+1种区间

ps 不保证没有其他错
ps2 问问poj的host现在是多少?还是poj.org?

yunzhonghe105
yunzhonghe105 对,还是这个地址
接近 2 年之前 回复
xxyyttxx
xxyyttxx 刚刚用你的代码改了改 过了。。你可以自己看记录Orz
接近 2 年之前 回复
xxyyttxx
xxyyttxx 枚举区间,找着limit+1种min的min... 求C币
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问