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 ...
随机推荐
- 1分钟入门接口自动化框架Karate
介绍 在这篇文章中,我们将介绍一下开源的Web-API自动化测试框架——Karate Karate是基于另一个BDD测试框架Cucumber来建立的,并且共用了一些相同的思想.其中之一就是使用Gher ...
- 企业上云这四大要点,你 get 了吗?
本文由 Platform9(一家专注于云计算.专有云.混合云.OpenStack 以及容器技术的北美初创公司)技术产品营销经理 Akshai Parthasarathy 撰写,描述了企业在向云基础设施 ...
- ModelAndView在页面上取值时value="{contextConfigLocation=<NONE>}"
后台: mv.getModel().put("initParam", 1); 页面: <input type="hidden" id="init ...
- Daily Scrum (2015/11/6)
今晚除了玉钟焕的其他成员在一起开了个短会.讨论有关添加新功能以及一些BUG问题.由于时间原因,我们本想把动态爬取功能留到第二个迭代中,但是现在目前时间还够,我们便一起对这一功能的讨论和实现进行分析. ...
- spring冲刺第六天
昨天编写地图代码,完善地图界面,使其变得美观. 今天把地图界面初步完成,和其他团队成员的成果进行结合,整合人物和地图代码. 遇到的问题:在整合时遇到的问题比较多,今天没有整合成功.
- Task 6.4 冲刺Two之站立会议8
今天团队主要进行了用户使用的部分,因为软件操作相对来说比较复杂,因为要改很多东西,比方用户注册,还有更改软件连接服务器的IP.所以我们需要对用户进行详细地讲解.
- iOS完整学习路线图-对知识的回顾/整理
第一阶段:语言基础 Mac系统使用.常用UNIX指令.C语言.Objective-C语言.Foundation框架. 第二阶段:iOS基础 AppDelegate & UIApplicatio ...
- iOS 判断当前app版本,升级
要获取当前app store上的最新的版本,有两种方法, 一.在某特定的服务器上,发布和存储app最新的版本信息,需要的时候向该服务器请求查询. 二.从app store上查询,可以获取到app的作者 ...
- Mongodb compass 介绍
参考官方文档:https://docs.mongodb.com/compass/current/install/#install-on-red-hat-enterprise-linux-rhel Mo ...
- (二)Jmeter各部件的作用
JMeter主要组件介绍 1.测试计划(Test Plan)是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器. 2.线程组(Thread Group)代表一定数量的并发用户 ...