题解 P1433 【吃奶酪】
这道题是一道著名的NP问题。
正解应该是DP,但我在这里讲一种近似算法——爬山。
希望某些dalao
注意一下爬山与模拟退火的区别。
爬山是直往低处往高处爬,每次取大的
,也就是一种贪心思想。
而模拟退火则是概率性
接受不优解。
不过一次爬山不一定可以找出最优解,要多次随机。
贪心思路如下:
- 随机数组
- for i=1->n,j=1->n 依次枚举两点
- 如果交换i,j后大小减小,更新答案
- 回到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 【吃奶酪】相关推荐
- 洛谷 P1433 吃奶酪 dfs剪枝
洛谷 P1433 吃奶酪 dfs剪枝 题解: dfs+剪枝,不过现在好像被卡时间了,第10个点过不了.. 代码如下: #include<iostream> #include<algo ...
- 洛谷 P1433 吃奶酪
这一题用到了状态压缩.然后接下来可以用 dp 或 dfs. 一开始我用的是 dp,不会,然后看题解,dp 写完感觉脑子糊糊的,于是打算写写 dfs. dfs 优化后还是 WA 了一个点,然后又跑去看大 ...
- P1433 吃奶酪(状压dp)
洛谷 / 题目列表 / 题目详情 P1433 吃奶酪 提交 23.28k 通过 9.30k 时间限制 1.00s 内存限制 125.00MB 题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问 ...
- 洛谷P1433 吃奶酪--Java解法(货郎担问题)
洛谷P1433 吃奶酪–Java解法(货郎担问题) 题目链接 解决思想 本题目是一个典型的货郎担问题,即从(0,0)点出发,所有点仅经过依次(我们可以用反证法证明如果有一个点经过两次其路径一定比每个点 ...
- 【每日一题】洛谷 p1433 吃奶酪 状压dp
- [P1433 吃奶酪](https://www.luogu.com.cn/problem/P1433) 换一种类型,这次求长度最小值,(n<15)接着状压 题目:房间里放着 nn 块奶酪.一 ...
- 洛谷P1433 吃奶酪【dfs】【剪枝】
题目:https://www.luogu.org/problemnew/show/P1433 题意: 给定n个坐标,要求从(0,0)开始走遍所有点,最少经过的路程. 思路: 刚开始想像数字三角形一样适 ...
- P1433 吃奶酪 回溯法 优化
题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处. 输入输出格式 输入格式: 第一行一个数n (n<=15) 接下来每行2个实数,表示第i块 ...
- 洛谷 - P1433 - 吃奶酪 - dfs
https://www.luogu.org/problemnew/show/P1433 并不是每一个求最短距离就是bfs,这个肯定是dfs. 直接计算15!可以知道枚举必定超时,但是! 我们dfs非常 ...
- 洛谷P1433 吃奶酪
题链 排列 的 装压 两个同类型的状压 No Change G 邦邦的大合唱站队 题目描述 房间里放着 n 块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在 (0,0)点处. 输入格 ...
- 洛古——P1433 吃奶酪
https://www.luogu.org/problem/show?pid=1433 题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处. 输入输 ...
最新文章
- 存储过程和存储函数初步
- Java集合框架之 Java HashMap 源码解析
- [51nod1376] 最长递增子序列的数量
- css3学习总结1--CSS3选择器
- 电脑忽然卡了,键盘鼠标也失灵,问题所在,如何处理?
- YBTOJ:消除格子(二分图匹配)
- for 循环 and while 循环(四)
- Spring Boot后台启动不打印nohup.out
- 目前服务器操作系统版本,Windows操作系统的版本选择
- dialogfield
- day01(计算机基本知识+JAVA基础知识+环境变量的配置+标识符命名规则+注释的分类)
- 今天做了一下chinaitlab上面的CCNA试题!
- PS 图片清晰度
- Linux 7 提示 -bash: ifconfig: command not found
- 什么是IDC ,可以用来做什么
- Java游戏开发——开心农场
- 如何更高效、系统地学习3D视觉?
- javaweb JAVA JSP汽车配件销售系统jsp配件销售网站 (jsp电子商务系统,购物商城)在线购物案例
- 二维码详解(QR Code)
- Qt属性动画仿真QPropertyAnimation的使用
热门文章
- 社交营销-也许是下一个风口之一
- 【语音识别】基于MPCC+IPL特征结合SVM实现中英语种识别含Matlab源码
- 计算机一级ppt操作题答案,大学计算机一级考试操作题考试要点ppt课件
- smartforms SE73 上传字体
- Vite + Vue3 +TS 项目router配置踩坑记录! ===>“找不到模块“vue-router”或其相应的类型声明。“<===
- excel插入行 uipath_UIPath入门系列三之操作Excel表格
- 汤池婚礼作品《七年》摄制艺术分析
- matlab课程设计报告封面,北航实验报告封面(共8篇).doc
- 【深度学习】Stable Diffusion AI 绘画项目搭建详解,并运行案例
- 中国矿业大学计算机学院升学,学霸是怎样炼成的 ——访中国矿业大学计算机学院大四国奖获得者李红...