遞歸剪枝題

期中考終于考完了,整道題獎勵下自己

我一北大同學問我的,說他遞歸超時了,叫我想一個辦法

后面他說他加了個剪枝就過了,然后我自己嘗試了一個方法:

就是先把城市按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.pswp.cn/news/165765.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165765.shtml
英文地址,請注明出處:http://en.pswp.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里面依靠這…

計算機視覺(CV)技術的優勢:

計算機視覺&#xff08;CV&#xff09;技術的優勢&#xff1a; 自動化&#xff1a;計算機視覺技術可以自動化處理大量的視覺數據。 精度和速度&#xff1a;計算機視覺技術可以在很短的時間內對大量的圖像數據進行處理&#xff0c;并且可以達到非常高的精度。 可靠性&#xff…

【微軟技術棧】使用(TAP)基于任務的異步模式

本文內容 使用 Await 掛起執行取消異步操作監視進度使用內置的基于任務的連結符構建基于任務的連結符構建基于任務的數據結構 c#使用基于任務的異步模式 (TAP) 處理異步操作時&#xff0c;可以使用回叫實現等待&#xff0c;而不會阻塞。 對于任務&#xff0c;這可通過 Task.C…

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 云平臺。服務涵蓋:財務、供…

什么是切片

切片&#xff0c;是一個比較生疏的名詞&#xff0c;這是現代計算機編程語言或者說Python里的一個概念&#xff0c;大致意思是從一個集合里切出一塊來&#xff0c;就像切一塊豆腐&#xff0c;一刀下去切出兩塊豆腐 先看一個函數range、返回值是列表&#xff0c;內容和傳入range…

【MySQL】mysql中不推薦使用uuid或者雪花id作為主鍵的原因以及差異化對比

文章目錄 前言什么是UUID?什么是雪花ID?什么是MySql自增ID?優缺點對比UUID:優點1.全球唯一性2.無需數據庫支持 缺點1.存儲空間大2.索引效率低3.查詢效率低 雪花ID&#xff1a;優點1.分布式環境下唯一性 缺點1.依賴于機器時鐘2.存儲空間較大3.查詢效率低 MYSQL自增:優點1.簡單…

qml PathView使用介紹

PathView 是 QML 的一個強大的元素,它能夠在任意路徑上布局和滾動項目。這使得創建復雜的滾動視圖和項目動畫變得相對更簡單。 以下是 PathView 的一些主要特性: 路徑定義: PathView 根據 Path 元素定義的路徑布局項目。路徑可以是簡單的直線,復雜的曲線,或者包含多個不同…

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 的…

【docker】安裝redis和mysql生產實戰

docker安裝諸如redis,mysql等程序非常方便,但是如果不是為了學習,生產環境的部署還是要注意很多問題的 mysql docker pull mysql:5.7mkdir -p /usr/docker/mysql/{conf,logs,data}docker run -d -p 3306:3306 --privilege

ORA-28003: password verification for the specified password failed,取消oracl密碼復雜度

自己在測試環境想要使自己的Oracle數據庫用戶使用簡單的密碼方便測試&#xff0c;結果指定密碼的密碼驗證失敗 SQL> alter user zzw identified by zzw; alter user zzw identified by zzw * ERROR at line 1: ORA-28003: password verification for the specified password…

本地部署 ComfyUI

本地部署 ComfyUI ComfyUI 介紹ComfyUI Github 地址部署 ComfyUI配置模型地址 or 下載模型啟動 ComfyUI訪問 ComfyUI ComfyUI 介紹 最強大、模塊化的穩定擴散 GUI 和后端。 該用戶界面將允許您使用基于圖形/節點/流程圖的界面設計和執行高級穩定擴散管道。 ComfyUI Github 地…

用戶運營常用的ChatGPT通用提示詞模板

如何建立和完善用戶運營體系&#xff0c;提高用戶滿意度和忠誠度&#xff1f; 如何制定有效的用戶獲取和留存策略&#xff0c;提高用戶生命周期價值&#xff1f; 如何運用多種渠道和平臺進行用戶運營&#xff0c;提高用戶參與度和互動性&#xff1f; 如何建立和維護用戶社群…

第五天 用Python批量處理Excel文件,實現自動化辦公

用Python批量處理Excel文件&#xff0c;實現自動化辦公 一、具體需求 有以下N個表&#xff0c;每個表的結構一樣&#xff0c;如下&#xff1a; 需要把所有表數據匯總&#xff0c;把每個人的得分、積分分別加起來&#xff0c;然后按總積分排名&#xff0c;總積分一致時&#xff…