zoukankan      html  css  js  c++  java
  • poj 2576 Tug of War

    还是神奇的随机算法,,(看视频说这是爬山法??)

    其实就是把序列随机分成两半(我太弱,只知道random_shuffle),然后再每个序列里rand一个位置,x,y然后比较是不是交换之后是更优的。

    然后重复这个过程。

    神奇。。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<ctime>
     4 #include<iostream>
     5 #include<algorithm>
     6 #define LL long long
     7 using namespace std;
     8 
     9 int n,q[505],a[505],b[505],ans1,ans2,ans;
    10 
    11 int main()
    12 {
    13     cin>>n;
    14     for (int i=1; i<=n; i++) scanf("%d",&q[i]);
    15     int CNT=50;
    16     while (CNT--)
    17     {
    18         random_shuffle(q+1,q+n+1);
    19         int lena=0,lenb=0,suma=0,sumb=0;
    20         for (int i=1; i<=n/2; i++) a[++lena]=q[i],suma+=q[i];
    21         for (int i=n/2+1; i<=n; i++) b[++lenb]=q[i],sumb+=q[i];
    22         int cnt=10000; ans=1e9;
    23         while (cnt--)
    24         {
    25             int x=rand()%lena+1,y=rand()%lenb+1;
    26             if (abs(suma-a[x]+b[y]-(sumb-b[y]+a[x]))<abs(suma-sumb)) 
    27                 suma=suma-a[x]+b[y],sumb=sumb-b[y]+a[x],swap(a[x],b[y]);
    28         }
    29         if (abs(suma-sumb)<ans) ans1=suma,ans2=sumb,ans=abs(suma-sumb);
    30     }
    31     if (ans1>ans2) swap(ans1,ans2);
    32     printf("%d %d
    ",ans1,ans2);
    33 }
  • 相关阅读:
    Docker镜像与仓库(四)
    Docker网络与存储(三)
    Docker基本使用(一)
    虚拟化KVM之优化(三)
    修改CENTOS7的网卡ens33修改为eth0
    虚拟化KVM之安装(二)
    虚拟化KVM之概述(一)
    Python不同版本打包程序为.exe文件
    JSON
    同源策略(same-origin policy)及三种跨域方法
  • 原文地址:https://www.cnblogs.com/ccd2333/p/6731439.html
Copyright © 2011-2022 走看看