种花小游戏 随机化搜索

植物大战僵尸这款游戏中,还有个特别有意思的赚钱方式——种花(能长金币的花)。
种出来的金币需要玩家点击才能得到,或者,玩家可以购买一只蜗牛来帮助捡金币。然而,蜗牛爬得慢是众所周知的。所以,场上有若干金币时,蜗牛总是喜欢以最少的行程来捡走所有的金币。
现在告诉你场上n个金币所在位置的坐标,以及蜗牛所在位置,让你求出蜗牛捡走所有金币的最小行程。

比较神奇,数据量是16,dfs可以过;随机化搜索,很稳定(所有的点都相同的时间);

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<ctime>
 4 #include<cstdlib>
 5 #include<cmath>
 6 using namespace std;
 7 #define up(i,p,n) for(int i=p;i<=n;i++)
 8 #define down(i,n,p) for(int i=n;i>=p;i--)
 9 namespace OI{
10     const int maxn=20,inf=100000000;
11     int n,a[maxn][2],q[maxn];
12     double d[maxn][maxn];
13     void swa(int i,int j){
14         for(;i<=j;i++,j--){
15             swap(q[i],q[j]);
16         }
17     }
18     double slove(){
19         up(i,1,100){
20             int x=rand()%n+1;
21             int y=rand()%n+1;
22             if(x==n)x=n-1;if(y==n)y=n-1;
23             swap(q[x],q[y]);
24         }
25         up(i,1,n)up(j,i+1,n-1)
26         if(d[q[i]][q[i+1]]+d[q[j-1]][q[j]]>d[q[i]][q[j-1]]+d[q[i+1]][q[j]])swa(i+1,j-1);
27         double t=0;
28         up(i,1,n-1)t+=d[q[i]][q[i+1]];
29         return t;
30     }
31     int squ(int x){return x*x;}
32     void init(){
33         srand(time(0));
34         scanf("%d",&n);n++;
35         up(i,1,n)scanf("%d%d",&a[i][0],&a[i][1]);
36         up(i,1,n)up(j,1,n)
37                 d[i][j]=sqrt(1.0*squ(a[i][0]-a[j][0])+squ(a[j][1]-a[i][1]));
38         //up(i,1,n)up(j,1,n)printf("%d %d %.2lf\n",i,j,d[i][j]);
39         up(i,1,n)q[i]=i;
40         double ans=(double)inf;
41         up(i,1,50000){
42             double t=slove();
43             if(t<ans)ans=t;
44         }
45         printf("%.2lf\n",ans);
46     }
47 }
48 int main(){
49     //freopen("1.in","r",stdin);
50     //freopen("1.out","w",stdout);
51     OI::init();
52     return 0;
53 }

时间: 2024-10-25 08:23:56

种花小游戏 随机化搜索的相关文章

P1834 种花小游戏

我只是想做壮鸭低劈啊,为什么只有状压没有DP-- 原题: 植物大战僵尸这款游戏中,还有个特别有意思的赚钱方式--种花(能长金币的花).种出来的金币需要玩家点击才能得到,或者,玩家可以购买一只蜗牛来帮助捡金币.然而,蜗牛爬得慢是众所周知的.所以,场上有若干金币时,蜗牛总是喜欢以最少的行程来捡走所有的金币.现在告诉你场上n个金币所在位置的坐标,以及蜗牛所在位置,让你求出蜗牛捡走所有金币的最小行程. n<=16 x.y<=10000 恩这题核心思路是压缩一维状态表示那些花取过了 还要有一维表示当前蜗

JZYZOJ1384 种花小游戏 状压dp

http://172.20.6.3/Problem_Show.asp?id=1384 最开始以为是dfs然后超时了,然后调了半天调成dp,还不如再写一遍... 代码 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath> 6 using namespace std; 7 const int maxn=1&

搜索7--noi1804:小游戏

搜索7--noi1804:小游戏 一.心得 二.题目 1804:小游戏 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 一天早上,你起床的时候想:"我编程序这么牛,为什么不能靠这个赚点小钱呢?"因此你决定编写一个小游戏. 游戏在一个分割成w * h个正方格子的矩形板上进行.如图所示,每个正方格子上可以有一张游戏卡片,当然也可以没有. 当下面的情况满足时,我们认为两个游戏卡片之间有一条路径相连: 路径只包含水平或者竖直的直线段.路径不能穿过别的游

两个Canvas小游戏

或许连小游戏都算不上,可以叫做mini游戏. 没有任何框架或者稍微有点深度的东西,所以有js基础的或者要追求炫酷效果的可以直接ctrl+w了. 先贴出两个游戏的试玩地址: 是男人就走30步 是男人就忍30秒 基础 接下来简单说说怎样开发这样的基础游戏. 首先你要懂得canvas上的基本api,可以参考w3cschool:如果你喜欢e文,也可以参考岑安推荐的HTML5 Canvas — the Basics 接着进入主流程,这样的canvas小游戏基本上都是基于每帧重绘,一般有下面这样的过程: 重

你的智商几年级,来体验这款小游戏吧!

数学再不学,脑子都笨了,闲暇的时候,写了一个小游戏,天才帝一步,欢迎大家下载,大人小孩能够比赛的! [技术支持]: 天才帝一步里面的后台数据和官方站点所有由"Bmob移动云服务"提供全套支持,须要了解的同学能够直接登录:www.bmob.cn 或者直接回复你的问题给我. [游戏简单介绍]: 天才帝一步,比比谁速度!自从用了"天才帝一步",妈妈再也不操心我的算术了! 1.经典模式:以最短时间答对20答题,俗称小旋风模式: 2.禅模式:就是20秒内答尽可量多题的模式,磨

C语言小游戏开发之贪吃蛇

寒假期间一时兴起,想着用C语言能开发出贪吃蛇小游戏应该是一件不错的事!但C语言学习过程中从来都是字符界面的编程,如何能有"图形化"的效果呢?于是小编就在度娘, 谷歌等网站搜索了一番,发现了一些有用的Win32 API函数,于是小编的心一下子激动了起来,有了这些API函数也许能够实现哟!开始吧! 编程之前小编的构思是这样的,贪吃蛇小游戏应该实现的有: 1.贪吃蛇在不进行控制的条件下应该能够自主前进. 2.玩家可以通过WASD键来控制贪吃蛇的前进方向. 3.运行过程中若贪吃蛇撞击到墙壁或自

javascrpit开发连连看记录-小游戏

工作之余,总想做点什么有意思的东西.但是苦于不知道做什么,也就一直没有什么动作.在一个午饭后,跟@jedmeng和@墨尘聊天过程中,发现可以写一些小东西来练练手,有以下几点好处: 1. 加强巩固前端相关知识 2. 可以用一些平时项目中想用但没用的新东西 3. 一块儿做相同的东西,可以分享各自不同的想法 先来一张效果图,也可以来这里玩玩~      接下来就介绍一下做这个小游戏,自己的一些步骤和思路: 首先就是熟悉连连看的规则,为此还专门下载了一个app感受了一下,规则简单的说就是:找到两个相同的

【C语言探索之旅】 第一部分第八课:第一个C语言小游戏

? 内容简介 1.课程大纲 2.第一部分第八课:第一个C语言小游戏 3.第一部分第九课预告: 函数 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算那点事 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理 创建你自己的变量类型 文

前端实现连连看小游戏(1)

博主玩了这么久的连连看,居然是第一次发现,连连看最多只能有2个转弯.orz- 在网上搜索连连看的连线算法判断,并没有找到很全面的,经过自己摸索之后,画了下面的图(图有点丑--) 一. 2个物体在同一直线上,可以直接连通 (这个不需要解释啦) 二.2个物体在同一直线上,中间有障碍物,不能直接连通 (2个转弯) [循环遍历黄线中的交点,比如A,B点,再判断蓝线有没有障碍物,若没有,则可以连通,若有,则继续循环查找新的A,B点] 三. 2个对象不在同一直线上,一个转弯 [2个物体分别在所在位置进行x,