这道题是一道著名的NP问题。

正解应该是DP,但我在这里讲一种近似算法——爬山。

希望某些dalao注意一下爬山与模拟退火的区别。

爬山是直往低处往高处爬,每次取大的,也就是一种贪心思想。

而模拟退火则是概率性接受不优解。

不过一次爬山不一定可以找出最优解,要多次随机。

贪心思路如下:

  1. 随机数组
  2. for i=1->n,j=1->n 依次枚举两点
  3. 如果交换i,j后大小减小,更新答案
  4. 回到1操作,并执行M次。

其中M是可选的,与your score成正比关系(当然太大就T了)

注意2,3不能保证已经无法更新(交换两个使答案减少),尽量做两次2,3。

我取M=50就A了,并是本题最快算法(我上面的都是面♂向♂数♂据♂编♂程

代码如下:

#include<bits/stdc++.h>
#define repeat(a,b,c,g) for (int a=b,abck=(g>=0?1:-1);abck*(a)<=abck*(c);a+=g)
using namespace std;
struct point {double x,y;
}a[20];
int n;
double operator - (point a,point b)
{return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
double calc()
{double ans=0;repeat(i,1,n,1)ans += a[i-1] - a[i];return ans;
}
int main()
{srand(1);cin >> n;a[0].x = 0;a[0].y = 0;repeat(i,1,n,1){cin >> a[i].x >> a[i].y;}double MIN = calc();repeat(_,1,50,1){repeat(i,1,n,1){swap(a[rand()%n+1],a[i]);}repeat(i,1,n,1)repeat(j,i+1,n,1){double tmp = calc();MIN = min(tmp,MIN);swap(a[i],a[j]);double tp2 = calc();if (tp2 > tmp)swap(a[i],a[j]);MIN = min(tp2,MIN);}repeat(i,1,n,1)repeat(j,i+1,n,1){double tmp = calc();MIN = min(tmp,MIN);swap(a[i],a[j]);double tp2 = calc();if (tp2 > tmp)swap(a[i],a[j]);MIN = min(tp2,MIN);}}printf("%.2f",MIN);
}

其实还可以更优,改过后不用再O(n)统计,直接O(1)计算

复杂度O(n*n*m)

转载于:https://www.cnblogs.com/dgklr/p/11179671.html

题解 P1433 【吃奶酪】相关推荐

  1. 洛谷 P1433 吃奶酪 dfs剪枝

    洛谷 P1433 吃奶酪 dfs剪枝 题解: dfs+剪枝,不过现在好像被卡时间了,第10个点过不了.. 代码如下: #include<iostream> #include<algo ...

  2. 洛谷 P1433 吃奶酪

    这一题用到了状态压缩.然后接下来可以用 dp 或 dfs. 一开始我用的是 dp,不会,然后看题解,dp 写完感觉脑子糊糊的,于是打算写写 dfs. dfs 优化后还是 WA 了一个点,然后又跑去看大 ...

  3. P1433 吃奶酪(状压dp)

    洛谷 / 题目列表 / 题目详情 P1433 吃奶酪 提交 23.28k 通过 9.30k 时间限制 1.00s 内存限制 125.00MB 题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问 ...

  4. 洛谷P1433 吃奶酪--Java解法(货郎担问题)

    洛谷P1433 吃奶酪–Java解法(货郎担问题) 题目链接 解决思想 本题目是一个典型的货郎担问题,即从(0,0)点出发,所有点仅经过依次(我们可以用反证法证明如果有一个点经过两次其路径一定比每个点 ...

  5. 【每日一题】洛谷 p1433 吃奶酪 状压dp

    - [P1433 吃奶酪](https://www.luogu.com.cn/problem/P1433) 换一种类型,这次求长度最小值,(n<15)接着状压 题目:房间里放着 nn 块奶酪.一 ...

  6. 洛谷P1433 吃奶酪【dfs】【剪枝】

    题目:https://www.luogu.org/problemnew/show/P1433 题意: 给定n个坐标,要求从(0,0)开始走遍所有点,最少经过的路程. 思路: 刚开始想像数字三角形一样适 ...

  7. P1433 吃奶酪 回溯法 优化

    题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处. 输入输出格式 输入格式: 第一行一个数n (n<=15) 接下来每行2个实数,表示第i块 ...

  8. 洛谷 - P1433 - 吃奶酪 - dfs

    https://www.luogu.org/problemnew/show/P1433 并不是每一个求最短距离就是bfs,这个肯定是dfs. 直接计算15!可以知道枚举必定超时,但是! 我们dfs非常 ...

  9. 洛谷P1433 吃奶酪

    题链 排列 的 装压 两个同类型的状压 No Change G 邦邦的大合唱站队 题目描述 房间里放着 n 块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在 (0,0)点处. 输入格 ...

  10. 洛古——P1433 吃奶酪

    https://www.luogu.org/problem/show?pid=1433 题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处. 输入输 ...

最新文章

  1. 存储过程和存储函数初步
  2. Java集合框架之 Java HashMap 源码解析
  3. [51nod1376] 最长递增子序列的数量
  4. css3学习总结1--CSS3选择器
  5. 电脑忽然卡了,键盘鼠标也失灵,问题所在,如何处理?
  6. YBTOJ:消除格子(二分图匹配)
  7. for 循环 and while 循环(四)
  8. Spring Boot后台启动不打印nohup.out
  9. 目前服务器操作系统版本,Windows操作系统的版本选择
  10. dialogfield
  11. day01(计算机基本知识+JAVA基础知识+环境变量的配置+标识符命名规则+注释的分类)
  12. 今天做了一下chinaitlab上面的CCNA试题!
  13. PS 图片清晰度
  14. Linux 7 提示 -bash: ifconfig: command not found
  15. 什么是IDC ,可以用来做什么
  16. Java游戏开发——开心农场
  17. 如何更高效、系统地学习3D视觉?
  18. javaweb JAVA JSP汽车配件销售系统jsp配件销售网站 (jsp电子商务系统,购物商城)在线购物案例
  19. 二维码详解(QR Code)
  20. Qt属性动画仿真QPropertyAnimation的使用

热门文章

  1. 社交营销-也许是下一个风口之一
  2. 【语音识别】基于MPCC+IPL特征结合SVM实现中英语种识别含Matlab源码
  3. 计算机一级ppt操作题答案,大学计算机一级考试操作题考试要点ppt课件
  4. smartforms SE73 上传字体
  5. Vite + Vue3 +TS 项目router配置踩坑记录! ===>“找不到模块“vue-router”或其相应的类型声明。“<===
  6. excel插入行 uipath_UIPath入门系列三之操作Excel表格
  7. 汤池婚礼作品《七年》摄制艺术分析
  8. matlab课程设计报告封面,北航实验报告封面(共8篇).doc
  9. 【深度学习】Stable Diffusion AI 绘画项目搭建详解,并运行案例
  10. 中国矿业大学计算机学院升学,学霸是怎样炼成的 ——访中国矿业大学计算机学院大四国奖获得者李红...