社区讨论

来个老哥救一下

P2210[USACO13OPEN] Haywire B参与者 4已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@m69a4uki
此快照首次捕获于
2025/01/23 19:58
去年
此快照最后确认于
2025/11/04 10:48
4 个月前
查看原帖
根据 Link,感觉老题解大多害人不浅。
写一下我理论分析认为错误的题解,但是懒得造 hack 了,老哥们帮忙看一看,如果没分析错就帮忙 @ 一下管理,有错误请指出。
CPP
else if((1.0*exp(rc-lsc))/T>(1.0*rand()/RAND_MAX))//以一定的概率接受较差的新解,具体讲解见上面贴的Ciyang大佬的博客 
{
	exc(x,y);//换回去(不换回去(即接受命运的审判(较差的新解))的概率会越来越低,可以自行理解,exp函数用法见Ciyang大佬的博客) 
}
这部分判断条件写错了。T 应放在 exp 里面,且应为 <。 2
CPP
else if(exp((best_ans - tmp_ans) / T) > (double)rand() / RAND_MAX) {
//条不接收较差的条件
	swap(pos[x], pos[y]);
    //不接受较差解,将两个牛位置交换回去
}
应为 <。
CPP
else if(exp(ans-Num)/T<double(rand())/RAND_MAX)swap(pos[x],pos[y]);
这里 T 应放在 exp 里面。
CPP
else if((exp(dc-linshi)*1.0/t>(rand()*1.0/RAND_MAX))) change(x,y); //用一定的概率接受该解(毕竟有比你优的,但是你肯定要把不优的换回去啊qwq 
T 应放在 exp 里面,应为 <。
CPP
if(exp(de/t)>rand())//这里是如果按一定概率接受答案没有接受,就把答案改回来
{
    swap(b[ex],b[ey]);
}
这位更是重量级。
CPP
if(exp(1.0*(now-lcans))/temp<1.0*rand()/RAND_MAX) // 概率接受
{
	swap(pos[x],pos[y]);
}
temp 应放在 exp 里面。
CPP
else if (exp(abs(now - ans)) * 1.0 / temp < rddb(10000) / 32767){
	ans = now;
}
temp 应放在 exp 里面。
CPP
else if (exp((ans - mmm) / t) > (double)rand() / (double)RAND_MAX) swap(pos[x], pos[y]);
应为 <。

回复

5 条回复,欢迎继续交流。

正在加载回复...