當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
洛谷P1337 [JSOI2004]平衡点 / 吊打XXX(模拟退火)
生活随笔
收集整理的這篇文章主要介紹了
洛谷P1337 [JSOI2004]平衡点 / 吊打XXX(模拟退火)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
傳送門
?
先坑著,聯賽活著回來的話我就寫(意思就是我絕對不會寫了)
1 //minamoto 2 #include<cstdio> 3 #include<cmath> 4 #include<ctime> 5 #include<cstdlib> 6 #define RD T*(rand()*2-RAND_MAX) 7 #define double long double 8 const int N=1005; 9 double x[N],y[N],w[N]; 10 const double D=0.97,EPS=1e-14; 11 int n; 12 inline double calc(double x0,double y0){ 13 double res=0,dx,dy; 14 for(int i=1;i<=n;++i){ 15 dx=x[i]-x0,dy=y[i]-y0; 16 res+=sqrt(dx*dx+dy*dy)*w[i]; 17 } 18 return res; 19 } 20 int main(){ 21 double bx=0,by=0,best,ans,T,x0,y0,x1,y1,res; 22 // freopen("testdata.in","r",stdin); 23 int times=1; 24 scanf("%d",&n); 25 for(int i=1;i<=n;++i){ 26 scanf("%Lf%Lf%Lf",&x[i],&y[i],&w[i]); 27 bx+=x[i],by+=y[i]; 28 } 29 best=ans=calc(bx/=n,by/=n); 30 srand(time(0)); 31 while(times--){ 32 ans=best,x0=bx,y0=by; 33 for(T=100000;T>EPS;T*=D){ 34 x1=x0+RD;y1=y0+RD; 35 res=calc(x1,y1); 36 if(best>res) best=res,bx=x1,by=y1; 37 if(ans>res||exp((ans-res)/T)>(double)rand()/RAND_MAX) 38 ans=res,x0=x1,y0=y1; 39 } 40 } 41 printf("%.3Lf %.3Lf\n",bx,by); 42 return 0; 43 }?
轉載于:https://www.cnblogs.com/bztMinamoto/p/9670345.html
總結
以上是生活随笔為你收集整理的洛谷P1337 [JSOI2004]平衡点 / 吊打XXX(模拟退火)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lua自动化脚本关于文本读写和特殊不可见
- 下一篇: 在EXCEL指定SHEET页,指定文字位