社区讨论

这道题的题解怎么回事?

P5544[JSOI2016] 炸弹攻击1参与者 8已保存回复 10

讨论操作

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

当前回复
10 条
当前快照
1 份
快照标识符
@lodu7fal
此快照首次捕获于
2023/10/31 12:36
2 年前
此快照最后确认于
2023/11/07 02:36
2 年前
查看原帖
RT
这道题的几篇题解都说自己写的是模拟退火,但是在他们代码的关键部分几乎都是这么写的
CPP
	if(Delta > 0){
			ans_now = now;
			ans_best = max(ans_now, ans_best);
			x_pla += delta_x;
			y_pla += delta_y;
		}
		else if(exp((double) -Delta / T) * RAND_MAX < rand()){
			x_pla += delta_x;
			y_pla += delta_y;
			ans_now = now;
		}

可以发现当Delta<0Delta<0的时候就到了下一个if那里
也可以轻易得到Delta/t>0-Delta/t>0这个显然的结论
这里就有问题了,为什么模拟退火的exp()exp()里面是>0>0
首先放上y=exy=e^x的函数图像
可以发现当x>0x>0的时候,ex>1e^x>1
那这样
CPP
exp((double) -Delta / T) * RAND_MAX < rand()
肯定是不成立的吧
这样,那些题解写的应该是爬山而不是退火吧

回复

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

正在加载回复...