bzoj 2428: [HAOI2006]均分数据 && bzoj 3680 : 吊打XXX 模拟退火
每次把元素随便扔随机一个初始解,退火时每次随机拿一个元素扔到随机一个集合里,当温度高时因为状态不稳定扔到那个元素和最小的里边。
如果新解优,更新ans。
把原式拆一下,就可以用int存了。
bzoj 2428
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define N 55
using namespace std;
int n,m;
int a[N],sum[N],be[N];
int ans;
void solve()
{
memset(sum,,sizeof(sum));
int now=;
for(int i=;i<=n;i++)
{
be[i]=rand()%m+;
now-=sum[be[i]]*sum[be[i]];
sum[be[i]]+=a[i];
now+=sum[be[i]]*sum[be[i]];
}
double T=;
while(T>0.1)
{
T*=0.9;
int x=rand()%n+,b=be[x],y;
if(T>)y=min_element(sum+,sum+m+)-sum;
else y=rand()%m+;
int tmp=now;
now-=sum[b]*sum[b];sum[b]-=a[x];now+=sum[b]*sum[b];
now-=sum[y]*sum[y];sum[y]+=a[x];now+=sum[y]*sum[y];
if(now<tmp)be[x]=y;
else
{
sum[b]+=a[x];sum[y]-=a[x];
now=tmp;
}
}
ans=min(ans,now);
}
int main()
{
srand();double sm=;
ans=0x3f3f3f3f;scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d",&a[i]),sm+=a[i];
for(int i=;i<=;i++)solve();
double tt=ans;tt-=sm*sm/m;tt/=m;
printf("%.2f\n",sqrt(tt));
return ;
}
不懂为什么新解没旧解有还要有一定概率接受新解,好像不写也能过。
bzoj 3680
求广义费马点,题意大概就是广义带权费马点的定义吧。$$min(\sum_{i=1}^{n} dis(i,p)*hight[i])$$
参数多调几遍就能过。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define N 10005
using namespace std;
int n;
double x[N],y[N],z[N];
double ansx,ansy,ans;
double dis(double x1,double y1,double x2,double y2)
{
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
inline double calc(double nx,double ny)
{
double res=;
for(int i=;i<=n;i++)
{
res+=z[i]*dis(nx,ny,x[i],y[i]);
}
return res;
}
double f()
{
int t=rand()%;
if(t==)return ;
return -;
}
double rd()
{
return rand()%/10000000.0*f();
}
void solve()
{
double T=1e5;
while(T>=1e-)
{
T*=0.98;
double xx=ansx+T*rd(),yy=ansy+T*rd();
double tt=calc(xx,yy);
if(tt<ans)
{
ans=tt;
ansx=xx;ansy=yy;
}
}
}
int main()
{
srand();
scanf("%d",&n);
ans=1e100;
for(int i=;i<=n;i++)
{
scanf("%lf%lf%lf",&x[i],&y[i],&z[i]);
}
solve();
printf("%.3f %.3f\n",ansx,ansy);
return ;
}
bzoj 2428: [HAOI2006]均分数据 && bzoj 3680 : 吊打XXX 模拟退火的更多相关文章
- bzoj 2428: [HAOI2006]均分数据 随机化
2428: [HAOI2006]均分数据 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...
- BZOJ.2428.[HAOI2006]均分数据(随机化贪心/模拟退火)
题目链接 模拟退火: 模拟退火!每次随机一个位置加给sum[]最小的组. 参数真特么玄学啊..气的不想调了(其实就是想刷刷最优解) 如果用DP去算好像更准.. //832kb 428ms #inclu ...
- bzoj 2428: [HAOI2006]均分数据
#include<cstdio> #include<iostream> #include<cstdlib> #include<ctime> #inclu ...
- 洛谷 P1337 平衡点 & bzoj 3680 吊打 XXX —— 模拟退火
题目:https://www.luogu.org/problemnew/show/P1337 https://www.lydsy.com/JudgeOnline/problem.php?id=3680 ...
- 2428: [HAOI2006]均分数据
模拟退火.一种十分玄学的随机算法,网上可以查到比较详细的资料. 先随机地把数分成m组,每次随机地选择一个数,一开始直接选最小的一组,后来就随机一组,把这个数换到该组看看答案能不能变小,如果变小则换,如 ...
- bzoj 3680 吊打xxx 模拟退火
第一道模拟退火 重心嘛,就是要找到一个点,使其到所有点距离*该点权值和最小 思路:初始化一个T,mint,当T大于mint时,每次随机一个解,如果解比当前解优,直接转移,否则,以某概率(与T正相关)转 ...
- BZOJ.3680.吊打XXX(模拟退火/爬山算法)
题目链接 一个比较好的解释? 模拟退火(Simulated Annealing,SA): (1)初始化一个温度(充分大).初始解状态S.每个T值的迭代次数. (2)对i=1,...,L,做(3)至(7 ...
- bzoj2428: [HAOI2006]均分数据
模拟退火.挺好理解的.然后res打成了ans一直WA一直WA...!!!一定要注意嗷嗷嗷一定要注意嗷嗷嗷一定要注意嗷嗷嗷. 然后我就一直卡一直卡...发现最少1800次的时候就可以出解了.然后我就去调 ...
- BZOJ 3680: 吊打XXX【模拟退火算法裸题学习,爬山算法学习】
3680: 吊打XXX Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 3192 Solved: 1198[Sub ...
随机推荐
- JAVA之运算符优先级
Java运算符优先级从高到低 运算符 结合性 [ ] . ( ) (方法调用) 从左向右 ! ~ ++ -- +(一元运算) -(一元运算) 从右向左 * / % 从左向右 + - 从左向右 < ...
- cmd下执行mysql
1. mysql -uroot -p1234; 2. show databases; 3. use testnode; 4. 创建数据库表 CREATE DATABASE `node` DEFA ...
- js备忘录6
- 使用谷歌浏览器调试WEB前端的一些必备调试技巧
转载:http://www.techug.com/post/chrome-debug-tips.html Chrome的开发者工具是个很强大的东西,相信程序员们都不会陌生,不过有些小功能可能并不为大众 ...
- 2017-2018-2学期 20172324《Java程序设计》第六周学习总结
20172324<Java程序设计>第六周学习总结 教材学习内容总结 如何创建数组以及int[] X与int X[]的区别(编译时是没有差别的,只是前者与其他类型的声明方式有一致性) 每一 ...
- PROFIBUS-DP
PROFIBUS – DP的DP即Decentralized Periphery.它具有高速低成本,用于设备级控制系统与分散式I/O的通信.它与PROFIBUS-PA(Process Automati ...
- 最新版ABP 动态WebAPI 日期转json带T的解决方案| ABP DateTIme Json format
ABP动态webapi返回的json数据中,日期时间带T还有毫秒数的问题,在以往的版本中可以使用下面方法解决: 在XXXAbpWebApiModule中加上下面的代码: 很老的很老的版本有效: pub ...
- 转 C#高性能Socket服务器SocketAsyncEventArgs的实现(IOCP)
原创性申明 本文作者:小竹zz 博客地址:http://blog.csdn.net/zhujunxxxxx/article/details/43573879转载请注明出处引言 我一直在探寻一个高性能 ...
- 在dell服务器上装windows server 2012详细解析
壹: 首先确定磁盘阵列的问题,在dell服务器开机后按住 Ctrl+R 或者 F2 会展开虚拟磁盘创建菜单 详细步骤可以查看:https://jingyan.baidu.com/article/915 ...
- 个人阅读&个人总结
个人阅读作业+总结 助教推荐的那些文章都是软件工程上的经典文章,阅读后感受到软件工程本身的深度,之前学习的软件工程都只是皮毛之中的皮毛而已.随着软件规模的越来越庞大,软件工程已经成为了软件开发中的必备 ...