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