日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【hdu4281状态压缩+01背包+多旅行商问题】

發(fā)布時(shí)間:2025/4/16 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【hdu4281状态压缩+01背包+多旅行商问题】 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題意:有n道題,每道題在二維平面內(nèi)的不同位置且給出每道題的坐標(biāo),同時(shí)給出處理每道題所需的時(shí)間p,現(xiàn)在已知裁判的耐心有限,之會(huì)花費(fèi)m個(gè)單位時(shí)間去做事,做完后回到起始點(diǎn)。
現(xiàn)在的要求是,我要多少個(gè)裁判才能對(duì)每個(gè)問題都處理完,并且同一道題不能有兩個(gè)裁判進(jìn)行處理,并求出總路徑最小的值。
總復(fù)雜度O(2^(2*n)+(2^n*n^2))

#include <bits/stdc++.h> #include<cstdio> #include<iostream> #include <iostream> #include <cstring> #define X 10005 #define inf 0x3f3f3f3f #define PI 3.141592653589793238462643383 #define IO ios::sync_with_stdio(false),cin.tie(0), cout.tie(0); #pragma comment(linker, "/STACK:1024000000,1024000000") #define MIN (1<<17) using namespace std; const int maxn = (int)1e5 + 10; typedef long long ll; int greedy(); int TSP_SECOND(); int n,m; int tot;//總的合法物品數(shù) int ans1;//第一問答案 int ans2;//第二問答案 int x[20],y[20];//坐標(biāo) int val[20];//權(quán)花費(fèi)的時(shí)間 int dp[MIN],state[MIN];//求最少多少個(gè)教練 int mp[20][20],isok[MIN];//邊權(quán)、合法物品集合 int cost[17][MIN],np[MIN];//多旅行商問題用到 void init() {tot=0;//memset(map,0,sizeof(map));for(int i=0;i<(1<<n);++i) np[i]=inf;///for(int i=0;i<=n;++i)for(int j=0;j<(1<<n);++j)cost[i][j]=inf;cost[0][1]=0;} int Enumeration_subset(int x) {int sum=0;for(int i=0;i<n;++i)//所在的集合iif(x&(1<<i))sum+=val[i];return sum<=m; } //將2^n種地點(diǎn)的選擇集合壓縮成2^n個(gè)物品(2^n個(gè)狀態(tài),因?yàn)槊總€(gè)任務(wù)在一個(gè)教練的下有被選擇和不被選擇兩種狀態(tài)),物品的權(quán)值為集合內(nèi)的點(diǎn)權(quán)之和, //如果總和<=m,那么他是一種合法的組合(說明是一個(gè)裁判可以在m的范圍內(nèi)可以把這些任務(wù)完成),存起來。 //這樣就得到tot種合法組合,對(duì)這tot種組合進(jìn)行01背包(注意是對(duì)合法的組合進(jìn)行01背包),dp[i]表示容量為i時(shí)的最小費(fèi)用(轉(zhuǎn)化為對(duì)應(yīng)得前i個(gè)二進(jìn)制位位1得狀態(tài)所需要的教練數(shù)),和常規(guī)的背包不同(但本質(zhì)是一樣的。) //狀態(tài)轉(zhuǎn)移方程:dp[i] = min(dp[i],dp[j]+1) //(j為i的子集(注意j是i的子集),i = j | state[k]并且j和state[k]沒有交集,state[k]表示第k個(gè)合法物品) int DP_FIRST() {//int mmin=inf;for(int i=0;i<(1<<n);++i) dp[i]=inf;dp[0]=0;for(int i=0;i<tot;++i){for(int j=(1<<n)-1;j>=0;--j){if(dp[j]==inf)continue;if((j+state[i])!=(j|state[i]))continue;//兩種狀態(tài)不能有交集 也可寫成if((j&state[i])!=0) 在poj2923中可以看到dp[j+state[i]]=min(dp[j+state[i]],dp[j]+1);//}}return dp[(1<<n)-1]; } int main() {while(cin>>n>>m){init();for(int i=0;i<n;++i)cin>>x[i]>>y[i];for(int i=0;i<n;++i)cin>>val[i];for(int i=1;i<(1<<n);++i){isok[i]=Enumeration_subset(i);if(isok[i])state[tot++]=i;}ans1=DP_FIRST(); //狀態(tài)壓縮01背包去求最少多少個(gè)教練//ans1=greedy(); //greedy求解if(ans1==inf){cout<<-1<<' '<<-1<<endl;continue;}//不能完成所有的任務(wù)ans2=TSP_SECOND();cout<<ans1<<' '<<ans2<<endl;}return 0; } /* 貪心得思想去求解最少要用多少個(gè)教練的個(gè)數(shù),每次一個(gè)教練都是從任務(wù)花費(fèi)的時(shí)間最大的時(shí)候開始進(jìn)行計(jì)算,直到不能解決新的任務(wù)結(jié)束 之后在對(duì)下一個(gè)教練進(jìn)行op, */ int greedy() {int temp[20],vis[20];for(int i=0;i<n;++i)temp[i]=val[i],vis[i]=0;sort(temp,temp);for(int i=1;i<=n;++i){int rest=m;for(int j=n-1;j>=0;--j)if(!vis[j]&&temp[j]<=rest)rest-=temp[j],vis[j]=1;for(int j=n-1;j>=0&&vis[j]==1;--j){if(j==0)return i;}}return inf; } /* 第二問:多旅行商問題即mTsp,感覺挺經(jīng)典的,思路是將mtsp轉(zhuǎn)化成普通的tsp,然后再將各個(gè)tsp合并成答案。 先要O(2^n*n^2)的預(yù)處理得到np[i]表示一個(gè)裁判走的集合為i的所有地點(diǎn)又回到最初的點(diǎn)的最少權(quán)值和, 然后np[i] = min(np[i],np[k|(1<<0)]+np[(i-k)|(1<<0)])(i必須包含0節(jié)點(diǎn),因?yàn)樽蛹赡懿缓?節(jié)點(diǎn),所以要和1<<0或起來,這樣才是將兩個(gè)裁判所走的邊權(quán)和合并)。 */ void GetDist() {for(int i=0;i<n;++i){for(int j=i+1;j<n;++j){mp[i][j]=mp[j][i]=ceil(sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])));}} } int TSP_SECOND() {GetDist();for(int i=1;i<(1<<n);++i)//求出各種路徑一種裁判的消費(fèi)if(isok[i]){for(int j=0;j<n;++j){if(i&(1<<j)){np[i]=min(np[i],cost[j][i]+mp[j][0]);for(int k=0;k<n;++k)if((i&(1<<k))==0)cost[k][i|(1<<k)]=min(cost[k][i|(1<<k)],cost[j][i]+mp[j][k]);}}}for(int i=1;i<(1<<n);++i)//多裁判消費(fèi)if(i&1)for(int j=(i-1)&i;j;j=(j-1)&i)np[i]=min(np[i],np[j|1]+np[(i-j)|1]);return np[(1<<n)-1]; }

?

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的【hdu4281状态压缩+01背包+多旅行商问题】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 黄色三级在线视频 | 日日精 | 午夜尤物 | 国产精品永久 | 亚洲手机在线观看 | 久久精品国产亚洲av嫖农村妇女 | 97av.com| 网址在线观看你懂的 | 亚洲yy | 久草视频免费在线 | 欧美怡红院视频一区二区三区 | 久久精品高清 | 国产精品卡一卡二 | 欧美亚洲国产成人 | 少妇高潮惨叫久久久久久 | 亚洲精品二 | 欧美性生活网址 | 日韩免费福利视频 | 99r精品视频 | 亚洲激情午夜 | 精品福利三区3d卡通动漫 | 蜜乳av 懂色av 粉嫩av | 亚洲第一国产视频 | 国产喷水福利在线视频 | 亚洲国产一级 | 好吊妞精品视频 | 国产精品麻豆成人av电影艾秋 | 中文字幕一区二区人妻在线不卡 | 亚洲精品中文字幕在线观看 | 爱爱91| 久久有精品 | 国产一区二区中文字幕 | 黄色网址av| 香蕉一区二区三区四区 | 国产无套内射普通话对白 | 黄站在线观看 | 精品国产一区二区三区久久久蜜月 | 国产精品入口a级 | 日本黄色免费观看 | 免费国产视频 | 波多在线播放 | 色黄网站在线观看 | 久久成人小视频 | 一区=区三区乱码 | 免费在线观看高清影视网站 | 久久久久久久久久久久久久久 | 国产亚洲精品久久久久四川人 | 免费无码不卡视频在线观看 | 蜜臀一区二区三区精品免费视频 | 亚洲欧美日韩精品在线 | 国产v综合v亚洲欧美久久 | 国产污视频在线看 | 国产又粗又猛又黄又爽的视频 | 亚洲精品国产成人 | 欧美亚洲在线 | 亚洲卡一卡二 | 国产精品视频在 | 一区二区在线免费观看视频 | 国产123在线 | 九九自拍视频 | 911久久| 日本色综合| 乱色视频 | 日本高清一区二区视频 | 狠狠干香蕉| 中国一级免费毛片 | 熟妇人妻一区二区三区四区 | 国产成人综合在线观看 | 国产精品无码在线播放 | 日本伊人影院 | www.色日本| 日本亲近相奷中文字幕 | 大桥未久av在线播放 | 理论片中文 | 国产精品一区二区人人爽 | 久久免费视频观看 | 丝袜ol美脚秘书在线播放 | 极品久久久久 | 久久久久久久久免费视频 | 国产探花一区 | www精品一区二区三区 | 国产激情网站 | 亚洲天堂国产精品 | 欧美日韩一区二区三区 | 奴色虐av一区二区三区 | 小向美奈子在线观看 | 亚洲欧美激情另类 | 日本免费一区二区三区四区五六区 | 99一区二区 | av免费在线观| 超碰caoporen | 在线岛国 | 欧美午夜精品一区二区三区电影 | 亚洲欧美中文日韩在线观看 | 午夜影院免费视频 | 国产一区二区波多野结衣 | 少妇一区二区三区 | 欧美一级黄色片在线观看 | 女生隐私免费看 |