递归剪枝题

期中考终于考完了,整道题奖励下自己

我一北大同学问我的,说他递归超时了,叫我想一个办法

后面他说他加了个剪枝就过了,然后我自己尝试了一个方法:

就是先把城市按1到n排列,然后考虑互换,如果互换后更便宜就换

这样下去的排列一直最优化进行

最后不能最优的时候就ok了

代码如下:

#include<stdio.h>
int cost[16][16];
int r[16];//routeint main(void)
{int n, m = 0, count = 1;scanf("%d", &n);for(int i = 1; i <= n; i++){for(int j = 1; j <= n; j++)scanf("%d", &cost[i][j]);r[i] = i;}//先计算总价钱mfor(int i = 1; i < n; i++)m += cost[i][i + 1];m += cost[1][n];//开始找最优解while(count){count = 0;for(int b = 1; b < n; b++){int a = (b == 1) ? n : b - 1;int c = b + 1;for(int e = b + 1; e <= n; e++){int d = e - 1;int f = (e == n) ? 1 : e + 1;int former = cost[r[a]][r[b]] + cost[r[b]][r[c]] + cost[r[d]][r[e]] + cost[r[e]][r[f]];r[b] ^= r[e] ^= r[b] ^= r[e];int later = cost[r[a]][r[b]] + cost[r[b]][r[c]] + cost[r[d]][r[e]] + cost[r[e]][r[f]];if(former > later){m -= former - later;count++;}elser[b] ^= r[e] ^= r[b] ^= r[e];}}}printf("%d", m);return 0;
}

想象很美好,结果呢?

没过

因为如果互换后价格一样,你是换还是不换?

考虑换的话可能最后不是最优,不换的话最后也可能不是最优

所以两个都要试一下

这样就不如递归剪枝

(注:a ^= b ^= a ^= b; 可以使二者互换,但是使用场景较少)

代码如下:

#include<stdio.h>
void dg(int x, int c);
int cost[16][16], city[16], r[16];//city route
int n, m;int main(void)
{scanf("%d", &n);for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++)scanf("%d", &cost[i][j]);//先计算总价钱mfor(int i = 1; i < n; i++)m += cost[i][i + 1];m += cost[1][n];dg(1, 0);printf("%d", m);return 0;
}
void dg(int x, int c)//c为cost
{for(int i = 1; i <= n; i++)if(!(city[i])){if(x == 1){city[i] = 1, r[x] = i;dg(x + 1, 0);city[i] = 0, r[x] = 0;}else if(x == n){c += cost[i][r[x - 1]] + cost[i][r[1]];m = (c > m) ? m : c;c -= cost[i][r[x - 1]] + cost[i][r[1]];}else{c += cost[i][r[x - 1]];if(c <= m){city[i] = 1, r[x] = i;dg(x + 1, c);city[i] = 0; r[x] = 0;}c -= cost[i][r[x - 1]];}}return;
}

后面还是超时

不知道为什么,思路和我同学都一样

代码如下:

#include<iostream>
using namespace std;
int n;
int a[15][15];
int b[15]{};
int i, j, k;
int c = 0;
int cost(int c1,int i) {if(c1>=c){return 0;}int j;int flag = 0;for (j = 0; j < n; j++) {if (b[j] == 0) {flag = 1;b[j] = 1;cost(c1 + a[i][j], j);b[j] = 0;}}if (flag == 0) {c1 += a[i][0];if (c1 < c) {c = c1;}}return 0;
}
int main() {cin >> n;for (i = 0; i < n; i++) {for (j = 0; j < n; j++) {cin >> a[i][j];}}for (i = 0; i < n; i++) {if (i < n - 1) {c += a[i][i + 1];}else {c += a[i][0];}}b[0]=1;cost(0,0);cout << c << endl;return 0;
}

(引自北京大学2023级最强新生)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/165765.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

考过了PMP,面试的时候应该怎么办?

近期喜番在后台收到了很多同学们的私信&#xff0c;表示自己已经过了8月份的PMP考试&#xff0c;开始着手往项目管理岗位转型&#xff0c;但是对于项目管理岗位的面试却一筹莫展。放轻松&#xff0c;大家的需求喜番都了解了&#xff0c;喜番给大家总结了一些项目经理在面试的时…

SpringCloud 微服务全栈体系(十七)

第十一章 分布式搜索引擎 elasticsearch 七、搜索结果处理 搜索的结果可以按照用户指定的方式去处理或展示。 1. 排序 elasticsearch 默认是根据相关度算分&#xff08;_score&#xff09;来排序&#xff0c;但是也支持自定义方式对搜索结果排序。可以排序字段类型有&#…

【Python】Fastapi swagger-ui.css 、swagger-ui-bundle.js 无法加载,docs无法加载,redocs无法使用

使用fastapi的时候&#xff0c;swagger-ui.css 、swagger-ui-bundle.js、redoc.standalone.js 有时候无法加载&#xff08;国内环境原因或者是局域网屏蔽&#xff09;&#xff0c;此时就需要自己用魔法下载好对应文件&#xff0c;然后替换到fastapi里面去。 fastapi里面依靠这…

java学习part07数组工具类

1比较内容 2输出信息 3值填充 4快速排序 5二分查找 负数没找到&#xff0c;其他表示下标

ES6 — ES14 新特性

一、ES6 新特性&#xff08;2015&#xff09; 1. let和const 在ES6中&#xff0c;新增了let和const关键字&#xff0c;其中 let 主要用来声明变量&#xff0c;而 const 通常用来声明常量。let、const相对于var关键字有以下特点&#xff1a; 特性varletconst变量提升✔️全局…

【漏洞复现】金蝶云星空管理中心 ScpSupRegHandler接口存在任意文件上传漏洞 附POC

漏洞描述 金蝶云星空是一款云端企业资源管理(ERP)软件,为企业提供财务管理、供应链管理以及业务流程管理等一体化解决方案。金蝶云星空聚焦多组织,多利润中心的大中型企业,以 “开放、标准、社交”三大特性为数字经济时代的企业提供开放的 ERP 云平台。服务涵盖:财务、供…

【MySQL】mysql中不推荐使用uuid或者雪花id作为主键的原因以及差异化对比

文章目录 前言什么是UUID?什么是雪花ID?什么是MySql自增ID?优缺点对比UUID:优点1.全球唯一性2.无需数据库支持 缺点1.存储空间大2.索引效率低3.查询效率低 雪花ID&#xff1a;优点1.分布式环境下唯一性 缺点1.依赖于机器时钟2.存储空间较大3.查询效率低 MYSQL自增:优点1.简单…

IP 代理的基础知识有哪些?

本文将介绍流冠IP代理的基础知识&#xff0c;帮助您了解IP代理的概念、类型、作用、设置方法和注意事项。 一、IP代理的概念 IP代理是一种网络代理服务&#xff0c;它通过代理服务器帮助用户访问互联网&#xff0c;并将用户的请求转发到目标网站&#xff0c;同时将目标网站的响…

手写工作流设计模式,针对常见的工作流步骤流转,减少过多的if/else,提升编程思维

需求 这一年下来&#xff0c;写两次工作流流转&#xff0c;总结下经验。 第一次写的时候&#xff0c;只找到用模版设计模式包裹一下&#xff0c;每个方法都做隔离&#xff0c;但是在具体分支实现的时候&#xff0c;if/else 满屏分&#xff0c;而且因为要针对不同情况&#xff…

微信小程序实现类似Vue中的computed、watch功能

微信小程序实现类似Vue中的computed、watch功能 构建npm使用 构建npm 创建包管理器 进入小程序后&#xff0c;打开终端&#xff0c;点击顶部“视图” - “终端” 新建终端 使用 npm init -y初始化包管理器&#xff0c;生成一个package.json文件 安装 npm 包 npm install --…

Java Web 实战 21 - 用 Servlet 实现一个Hello World

用 Servlet 来写一个 Hello World~ 一 . 基本部署方式1.1 创建 Servlet 项目1.2 引入依赖1.3 创建目录1.4 编写代码继承 HttpServlet重写 doGet 方法删除 super 方法加上 WebServlet 注解写业务逻辑 1.5 打包1.6 部署1.7 验证1.8 小结 二 . 更方便的部署方式2.1 Smart Tomcat 的…

本地部署 ComfyUI

本地部署 ComfyUI ComfyUI 介绍ComfyUI Github 地址部署 ComfyUI配置模型地址 or 下载模型启动 ComfyUI访问 ComfyUI ComfyUI 介绍 最强大、模块化的稳定扩散 GUI 和后端。 该用户界面将允许您使用基于图形/节点/流程图的界面设计和执行高级稳定扩散管道。 ComfyUI Github 地…

第五天 用Python批量处理Excel文件,实现自动化办公

用Python批量处理Excel文件&#xff0c;实现自动化办公 一、具体需求 有以下N个表&#xff0c;每个表的结构一样&#xff0c;如下&#xff1a; 需要把所有表数据汇总&#xff0c;把每个人的得分、积分分别加起来&#xff0c;然后按总积分排名&#xff0c;总积分一致时&#xff…

小程序可拖拽按钮

你有没有遇到过在页面中有一个固定在某个位置的按钮&#xff0c;永远的挡住了你想要看的区域&#xff1f; 在小程序的列表页面中&#xff0c;常常会有一个提报的入口固定在右下角&#xff0c;如果这个按钮不可拖动的话&#xff0c;可能会挡住下面的事件&#xff0c;让用户操作起…

云端导览,数字互动 | 拓世法宝AI数字人一体机助力全新旅游时代

《中国旅行消费趋势洞察白皮书&#xff08;2023版&#xff09;》显示&#xff0c;消费者旅行习惯已从“到此一游”变为“深度在地”&#xff0c;更强调在旅游中充实自我、学习新知识。 &#xff08;《中国旅行消费趋势洞察白皮书&#xff08;2023版》截图&#xff09; 从这些资…

Springboot整合MybatisPlus及分页功能

1 引入pom <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot</artifactId><version>2.7.14</version> </dependency> <dependency><groupId>com.baomidou</groupId><a…

【Vue】Vue3 配置全局 scss 变量

variables.scss $color: #0c8ce9;vite.config.ts // 全局css变量css: {preprocessorOptions: {scss: {additionalData: import "/styles/variables.scss";,},},},.vue 文件使用

Java大型电商项目——品优购(一)

视频教程&#xff1a;【黑马程序员】Java大型电商项目—品优购【配套源码笔记】_哔哩哔哩_bilibili源码下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1fECz5In_XCB-aW6ed6ZTbA 提取码&#xff1a;27xa 技术选型&#xff1a; 后端框架&#xff1a;SpringSprin…

多功能回馈式交流电子负载的应用

多功能回馈式交流电子负载是用于模拟和测试电源、电池等电子设备的负载工具。它具有多种应用&#xff0c;可以用于测试和评估各种类型的电源&#xff0c;包括直流电源和交流电源。它可以模拟各种负载条件&#xff0c;如恒定电流、恒定电压和恒定功率&#xff0c;以验证电源的性…

小叶子钢琴智能陪练 助力打牢钢琴基础

孩子在练琴过程中&#xff0c;经常会出现错音错节奏&#xff0c;为了能够帮助她更高效的练琴&#xff0c;最近开始使用智能钢琴陪练工具——小叶子钢琴智能陪练。 身边也有很多朋友在用这款应用&#xff0c;它比较知名的功能就是三大练琴模式&#xff0c;也就是识谱模式、提升…