概述
[返回模拟退火略解]
题目描述
一数轴上有 n n n 个点,有 n n n 个环,求一种组合方案,使得所有边长度和最小。
Solution 2210 text{Solution 2210} Solution 2210
很容易想到 随机化 / SA
。
每次 random_shuffle
一个排列,然后判断能否更新答案。注意细节即可。
贴上随机的答案。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<algorithm>
#define reg register
int n;
int a[20],b[20],c[20];
int ans=0x3f3f3f3f;
int id[20];
void work(){
for(reg int i=1;i<=n;++i)
id[i]=i;
std::random_shuffle(id+1,id+n+1);
int cnt=0;
for(reg int i=1;i<=n;++i)
cnt+=abs(id[i]-id[a[i]])+abs(id[i]-id[b[i]])+abs(id[i]-id[c[i]]);
cnt>>=1;
if(ans>cnt) ans=cnt;
}
int main(){
srand(233); //233是个很神奇的种子!!!
scanf("%d",&n);
for(reg int i=1;i<=n;++i)
scanf("%d%d%d",&a[i],&b[i],&c[i]);
for(reg int i=1;i<=1e7;++i)
work();
printf("%d",ans);
}
最后
以上就是爱撒娇滑板为你收集整理的luogu P2210 Haywire的全部内容,希望文章能够帮你解决luogu P2210 Haywire所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复