備戰藍橋杯---狀態壓縮DP基礎2之TSP問題

先來一個題銜接一下:

與上一題的思路差不多,不過這里有幾點需要注意:

1.因為某一列的狀態還與上上一行有關,因此我們令f[i][j][k]表示第i行狀態為j,第i-1行狀態為k的最大炮兵數。

因此,我們可以得到狀態轉移方程:f[i][j][k]=max(f[i][j][k],f[i-1][k][q]+num[j])其中我們保證j,k,q不沖突并且自己可以。

2.注意到直接開存不下,我們考慮用vector存符合條件的,并計算一下有幾個再開空間。

下面是AC代碼:

#include<bits/stdc++.h>
using namespace std;
int n,m,a[110],dp[110][70][70];
vector<int> st;
char b;
vector<int> num;
int calc(int num){int ans=0;while(num){if((num&1)==1) ans++;num>>=1;}return ans;
}
int main(){cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){scanf(" %c",&b);if(b=='H'){a[i]|=(1<<(j-1));}}}for(int i=0;i<=(1<<m)-1;i++){if(i&(i<<1)) continue;if(i&(i<<2)) continue;st.push_back(i);num.push_back(calc(i));}int ans=0;for(int i=1;i<=n;i++){for(int j=0;j<st.size();j++){if((a[i]&st[j])) continue;for(int k=0;k<st.size();k++){if((a[i-1]&st[k])) continue;if((st[k]&st[j])) continue;for(int q=0;q<st.size();q++){if(i>=2){if((a[i-2]&st[q])) continue;}if((st[k]&st[q])) continue;if((st[q]&st[j])) continue;dp[i][j][k]=max(dp[i][j][k],dp[i-1][k][q]+num[j]);ans=max(ans,dp[i][j][k]);}}}}cout<<ans;
}

首先,什么是TSP問題?

即給你一張抽象的圖,求從某一個起點出發,經過所有點的最短路徑。

如何解決呢?

我們先建立一個超級源點,這就解決了從某一個起點出發的問題,然后,我們假設走了134,現在在5,那么后來的267是與134的走法無關的,因此我們只要保留最短的即可,即DP。

因此,我們可以令f[st][i]表示當前狀態為st,最后到達的一個點為i所經過的最短路徑。

訪問過標1,未訪問標0.

轉移方程為f[st][i]=min(f[st'][j]+a[j][i]).(st'=st-1<<(i-1)).

若為必須回到原點,那么走出來的一定是一個圈,因此我們固定1為起點,然后在原來的結果上加上終點與1的邊。

下面是實現代碼:

#include<bits/stdc++.h>
using namespace std;
int n,m,a[25][25],dp[1<<20][25];
int f(int st,int x){if(dp[st][x]<=1e9){return dp[st][x];}int stt=st-(1<<(x-1));for(int i=1;i<=n;i++){if(a[i][x]==0) continue;if((stt>>(i-1))&1){dp[st][x]=min(dp[st][x],a[i][x]+f(stt,i));}}return dp[st][x];
}
int main(){cin>>n>>m;for(int i=1;i<=m;i++){int x,y,z;cin>>x>>y>>z;a[x][y]=z;a[y][x]=z;}memset(dp,0x7f,sizeof(dp));dp[1][1]=0;int ans=0x7f7f7f7f;int st=(1<<n)-1;for(int i=2;i<=n;i++){int tmp=f(st,i);if(a[i][1]!=0) ans=min(ans,a[i][1]+tmp);}cout<<ans;
} 

我們來看一個類似的問題:

思路類似,我們令f[i]表示狀態為i時獲得的最大能量。

其中第k位==1表示它已經用了并消失,為0表示沒有用或用了沒消失。

易得狀態轉移方程:f[k|(1<<(i-1)]=max(f[k]+a[j][i]).我們轉換一下:

f[k]=max(f[k']+a[j][i])(其中k'的i與j位為0,k=k'+1<<(i-1))

下面是AC代碼:

#include<bits/stdc++.h>
using namespace std;
int n,a[14][14],x,f[2000];
int main(){while(cin>>n){memset(f,0,sizeof(f));if(n==0) break;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){scanf("%d",&x);a[i][j]=x;}}int ans=0;for(int i=1;i<=(1<<n)-2;i++){for(int k=0;k<i;k++){for(int ii=1;ii<=n;ii++){if((k>>(ii-1))&1) continue;for(int jj=1;jj<=n;jj++){if((k>>(jj-1))&1) continue;if(i!=(k|(1<<(jj-1)))) continue;f[i]=max(f[i],f[k]+a[ii][jj]);ans=max(ans,f[i]);}}}}printf("%d\n",ans);}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/717326.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/717326.shtml
英文地址,請注明出處:http://en.pswp.cn/news/717326.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2024/03/01

控制機械臂 #include<myhead.h> #define SER_IP "192.168.126.2" #define SER_PORT 8888#define CLI_IP "192.168.252.165" #define CLI_PORT 9999int main(int argc, const char *argv[]) {int cfdsocket(AF_INET,SOCK_STREAM,0);if(cfd-1){perror…

成功解決git clone遇到的error: RPC failed; curl 16 Error in the HTTP2 framing layer fatal: expected flush af

成功解決git clone遇到的error: RPC failed; curl 16 Error in the HTTP2 framing layer fatal: expected flush af 問題描述解決方案 問題描述 用git的時候可能會遇到這個問題&#xff1a; (base) zhouzikang7443-8x4090-120:~/project$ git clone https://github.com/123/12…

Windows服務器:通過nginx反向代理配置HTTPS、安裝SSL證書

先看下效果&#xff1a; 原來的是 http&#xff0c;配置好后 https 也能用了&#xff0c;并且顯示為安全鏈接。 首先需要 SSL證書 。 SSL 證書是跟域名綁定的&#xff0c;還有有效期。 windows 下雙擊可以查看相關信息。 下載的證書是分 Apache、IIS、Tomcat 和 Nginx 的。 我…

【leetcode】圓圈中最后剩下的數字

目錄 1. 問題 2. 思路 3. 代碼 4. 運行 1. 問題 本題即為典型的約瑟夫問題&#xff0c;通過遞推公式倒推出問題的解。原始問題是從n個人中每隔m個數踢出一個人&#xff0c;原始問題變成從n-1個人中每隔m個數踢出一個人…… 示例 1&#xff1a; 輸入: n 5, m 3 輸出: 3…

Unity TMP文字移動效果

前言 看見很多游戲有很特殊的波浪形文字效果&#xff0c;于是來嘗試一下控制TMP文字頂點的方式達到類似效果。 原理 掛載tmp text&#xff0c;在里面隨便放入非空格字符。 tmp text組件開放了textInfo接口&#xff0c;也就是GetComponent<TextMeshProUGUI>().textInfo…

兩天學會微服務網關Gateway-Gateway簡介

鋒哥原創的微服務網關Gateway視頻教程&#xff1a; Gateway微服務網關視頻教程&#xff08;無廢話版&#xff09;_嗶哩嗶哩_bilibiliGateway微服務網關視頻教程&#xff08;無廢話版&#xff09;共計17條視頻&#xff0c;包括&#xff1a;1_Gateway簡介、2_Gateway工作原理、3…

使用.NET開發VSTO工具快速將PPT導出為圖片

本文主要介紹如何使用.NET開發 PowerPoint VSTO 外接程序&#xff0c;并實現快速的將當前頁PPT導出為圖片的功能。可以幫助你了解如何使用 VSTO 開發 Office 外接程序&#xff0c;以及如何操作 PowerPoint 的對象模型。 1. 背景 在日常的文章寫作中&#xff0c;我經常使用 PPT…

Vue 3 中的 watchEffect 和 watch 有什么區別?

Vue 3 中的 watchEffect 和 watch 有什么區別&#xff1f; Vue 3 引入了 Composition API&#xff0c;為開發者提供了更加靈活和組織化的方式來組合和復用代碼邏輯。在響應式系統中&#xff0c;watch 和 watchEffect 是兩個重要的函數&#xff0c;用于觀察和響應 Vue 組件中狀…

JUC并發編程 深入學習Java并發編程【上】

JUC并發編程&#xff0c;深入學習Java并發編程&#xff0c;與視頻每一P對應&#xff0c;全系列6w字。 P1-5 為什么學特色預備知識 進程線程概念 進程&#xff1a; 一個程序被運行&#xff0c;從磁盤加載這個程序的代碼到內存&#xff0c;就開起了一個進程。 進程可以視為程…

JVM相關問題

JVM相關問題 一、Java繼承時父子類的初始化順序是怎樣的&#xff1f;二、JVM類加載的雙親委派模型&#xff1f;三、JDK為什么要設計雙親委派模型&#xff0c;有什么好處&#xff1f;四、可以打破JVM雙親委派模型嗎&#xff1f;如何打破JVM雙親委派模型&#xff1f;五、什么是內…

Spring Cloud Gateway-系統保護Sentinel集成

文章目錄 Sentinel介紹Spring Cloud Gateway集成Sentinelpom依賴Sentinel配置Sentinel集成Nacos作為數據源自定義降級響應 Sentinel介紹 ? 隨著微服務的流行&#xff0c;服務和服務之間的穩定性變得越來越重要。Sentinel 是面向分布式、多語言異構化服務架構的流量治理組件&a…

HTML5:七天學會基礎動畫網頁6

CSS3自定義字體 ①&#xff1a;首先需要下載所需字體 ②&#xff1a;把下載字體文件放入 font文件夾里&#xff0c;建議font文件夾與 css 和 image文件夾平級 ③&#xff1a;引入字體&#xff0c;可直接在html文件里用font-face引入字體&#xff0c;分別是字體名字和路徑 例…

Django官網項目

項目準備 使用VSCODE做IDE。 檢查Python版本。 sudo apt install sudo apt update python3 --version創建項目路徑&#xff0c;創建虛擬環境&#xff0c;創建項目 路徑 \mysite 進入路徑&#xff0c;運行VSCODE 運行 "code ." 創建虛擬環境。 選擇 >python: c…

【推薦算法系列十七】:GBDT+LR 排序算法

排序算法經典中的經典 參考 推薦系統之GBDTLR 極客時間 手把手帶你搭建推薦系統 課程 邏輯回歸&#xff08;LR&#xff09;模型 邏輯回歸&#xff08;LR,Logistic Regression&#xff09;是一種傳統機器學習分類模型&#xff0c;也是一種比較重要的非線性回歸模型&#xff…

AAAI2024-分享若干篇有代碼的優秀論文-圖神經網絡、時間序列預測、知識圖譜、大模型等

圖神經網絡、大模型優化方向系列文章目錄 為了方便大家根據自己的興趣查看自己的研究方向論文&#xff0c;在這里進行了細分。如果有對其中的論文感興趣的&#xff0c;可以查看對應的文章在論文相應的代碼&#xff0c;方便快速上手學習&#xff0c;也可以借助這些代碼的學習快…

16 Educational Codeforces Round 142 (Rated for Div. 2)C. Min Max Sort(遞歸、思維、dp)

C. Min Max Sort 很不錯的一道題目&#xff0c;不過腦電波和出題人每對上&#xff0c; q w q 。 qwq。 qwq。 正難則反。 我們考慮最后一步是怎么操作的。 最后一步一定是對 1 1 1和 n n n進行操作 那么上一步呢&#xff1f; 上一步應該是對 2 2 2和 n ? 1 n-1 n?1 以此類推…

AMD“高級洞察”系列揭示Epyc Naples和Rome原型CPU早期無法啟動問題

AMD在其新的YouTube視頻系列《高級洞察》第一集中&#xff0c;由AMD首席技術官Mark Papermaster擔任主持人&#xff0c;討論了AMD在數據中心領域的突破性進展及其持續增長。然而&#xff0c;AMD在服務器業務的發展并非一帆風順&#xff0c;兩位高管公開討論了早期Epyc Naples和…

【Python】環境管理怎么選擇【virtualenv】【pipenv】【 poetry】【 conda】

前言 剛入門Python&#xff0c;看到PyCharm的環境管理選擇有好幾個選擇&#xff0c;分別是virtualenv、pipenv、venv、conda&#xff0c;只知道這些都可以用來管理Python環境的&#xff0c;但不知道這些環境有什么區別&#xff0c;所以&#xff0c;本文將對這些環境管理進行總…

Avalonia學習(二十九)-儀表

Avalonia制作儀表盤&#xff0c;把控件給大家演示一下&#xff0c;Avalonia有三類自定義控件&#xff0c;分別是用戶控件、模版控件、自主控件。前面已經很多用戶控件了&#xff0c;這個是演示模版控件&#xff0c;另外一種不知道哪種情況下使用。 前端代碼&#xff1a; <…

想從事數據方向職場小白看過來, 數據方面的一些英文解釋

想從事數據方向職場小白看過來&#xff0c;一些英文名詞解釋 文章目錄 想從事數據方向職場小白看過來&#xff0c;一些英文名詞解釋 英文類解釋NoSQL&#xff1a;ESB&#xff1a;ACID &#xff1a;Data Vault&#xff1a;MDM&#xff1a;OLAP&#xff1a;SCD:SBA&#xff1a;MP…