回溯算法缺少一个初始化语句导致错误?

drizztguai 2009-07-17 11:54:21
题目:

是道acm题,简单描述一下。

题目链接 : http://acm.pku.edu.cn/JudgeOnline/problem?id=3413

一个Hero 有经验xp
然后遇到N个任务,完成这个任务的概率满足均匀分布,完成一个任务得到经验。
求一个任务的顺序,来得到完成所有任务的最高几率。

以下是代码:
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <iomanip>

using namespace std;


double a[12],
b[12],
xp[12];

double best;
int Finish[12];
int n;
int Bestsort[12];
int tsort[12];

double glv(double aa,double bb,double xp){
if(xp<=aa) return 0.00;
else if(xp>=bb) return 1.00;
else return (xp-aa)/(bb-aa);
}

void Search(int ti,double db,double dxp,int count){
int j;
count++;
Finish[ti]=1;
tsort[count] = ti;

if(count == n && best < db*glv(a[ti],b[ti],dxp) ){
best = db*glv(a[ti],b[ti],dxp);
for(j=1;j<=n;j++)
Bestsort[j] = tsort[j];
return;
}
db = db*glv(a[ti],b[ti],dxp);
dxp = dxp + xp[ti];
for(j=1;j<=n;j++){
if(Finish[j] == 0 && db*glv(a[j],b[j],dxp) > best){
Search(j,db,dxp,count);
Finish[j]= 0;
}
}
}

void solve(double D){
int i;
best = 0.0;
for(i=1;i<=n;i++){
Finish[i] = 0;
Bestsort[i] = i;
}

for(i=1;i<=n;i++){
if(D>a[i]){
Search(i,1.00,D,0);
Finish[i] = 0;
}
}
printf("%.3f\n",best);
for(i=1;i<=n;i++) printf("%d ",Bestsort[i]);
printf("\n");

}
int main()
{
double D;
scanf("%d %lf",&n,&D);
int i;
for(i=1;i<=n;i++){
scanf("%lf %lf %lf",&a[i],&b[i],&xp[i]);
}
solve(D);
}


这个时候问题出现了 !

若加红的语句去掉,poj将判断程序错误。


...全文
75 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengtaocat 2009-07-30
  • 打赏
  • 举报
回复
Bestsort除了初始化,只有在这里有赋值。

if(count == n && best < db*glv(a[ti],b[ti],dxp) ){
best = db*glv(a[ti],b[ti],dxp);
for(j=1;j <=n;j++)
Bestsort[j] = tsort[j];
return;
}

如果if语句判定条件不符合,就不会对Bestsort赋值,Bestsort里面的值就都是0了。

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧