多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > 綜合技術(shù) > poj 3311 Hie with the Pie 狀壓dp

poj 3311 Hie with the Pie 狀壓dp

來源:程序員人生   發(fā)布時間:2015-04-29 08:34:11 閱讀次數(shù):3689次
//參考了挑戰(zhàn)程序設(shè)計第2版的tsp,dp[S][v]表示在已訪問了集合S中的點情況下 //從動身訪問剩下的節(jié)點并回到0號出發(fā)點的最少花費dp[V][0]都是0, //從0號節(jié)點回到0花費肯定是0, //dp[S][v] = min(dp[S|{u}][u]+d[v][u],dp[S][v]){u不在當(dāng)前的集合中} //這樣我們從[0,0]這個狀態(tài)開始進行記憶化搜索,就1定能得到我們想要的答案 //對遞推的做法,目前還有1絲的疑惑 //書上說對集合S(i)包括于S(j),就有i<=j; //solve3()中dp[S][v]表示當(dāng)前在v點,還需訪問S中的城市各1次后回到0處的最小花費 //初始的時候dp[0][i]=d[i][0],其他都為無窮大,狀態(tài)轉(zhuǎn)移方程為 //dp[S][v] = min(dp[S][v],dp[S-{j}][j]+d[i][j])(j屬于S) //最后dp[S][0]就是我們要求的答案 //每種做法,各有千秋吧,僅以此題記念自己開啟TSP之旅~繼續(xù)練吧 #include <algorithm> #include <bitset> #include <cassert> #include <cctype> #include <cfloat> #include <climits> #include <cmath> #include <complex> #include <cstdio> #include <cstdlib> #include <cstring> #include <ctime> #include <deque> #include <functional> #include <iostream> #include <list> #include <map> #include <numeric> #include <queue> #include <set> #include <stack> #include <vector> #define ceil(a,b) (((a)+(b)⑴)/(b)) #define endl ' ' #define gcd __gcd #define highBit(x) (1ULL<<(63-__builtin_clzll(x))) #define popCount __builtin_popcountll typedef long long ll; using namespace std; const int MOD = 1000000007; const long double PI = acos(⑴.L); template<class T> inline T lcm(const T& a, const T& b) { return a/gcd(a, b)*b; } template<class T> inline T lowBit(const T& x) { return x&-x; } template<class T> inline T maximize(T& a, const T& b) { return a=a<b?b:a; } template<class T> inline T minimize(T& a, const T& b) { return a=a<b?a:b; } const int maxn = 13; int d[maxn][maxn]; int dp[1 << maxn][maxn]; int n; const int inf = 0x3f3f3f3f; void init(){ n++; for (int i=0;i<n;i++) for (int j=0;j<n;j++) scanf("%d",&d[i][j]); } int dfs(int S,int v){ if (dp[S][v]>=0) return dp[S][v]; if (S==(1<<n)⑴&&v==0){ return dp[S][v]=0; } int res = inf; for (int u=0;u<n;u++) if (!((S>>u)&1)){ res = min(res,dfs(S|(1<<u),u)+d[v][u]); } return dp[S][v] = res; } void floyd(){ for (int k=0;k<n;k++) for (int i=0;i<n;i++) for (int j=0;j<n;j++) if (d[i][j]>d[i][k]+d[k][j]) d[i][j] = d[i][k]+d[k][j]; } void TSP(){ // for (int i=0;i<n;i++) dp[(1<<n)⑴][0]=0; for (int S=(1<<n)⑴;S>=0;S--) for (int i=0;i<n;i++) for(int u=0;u<n;u++) if (!((S>>u)&1)){ dp[S][i] = min(dp[S][i],dp[S|(1<<u)][u]+d[i][u]); } } void solve(){ memset(dp,⑴,sizeof(dp)); printf("%d ",dfs(0,0)); } void solve2(){ memset(dp,inf,sizeof(dp)); TSP(); printf("%d ",dp[0][0]); } void print(){ for (int i=0;i<(1<<n);i++){ for (int j=0;j<n;j++) printf("%d ",dp[i][j]); puts(""); } } void solve3(){ memset(dp,inf,sizeof(dp)); for (int i=0;i<n;i++) dp[0][i] = d[i][0]; for (int S=0;S<(1<<n);S++) for (int v=0;v<n;v++) for (int u=0;u<n;u++) if ((S>>u)&1) dp[S][v] = min(dp[S][v],dp[S^(1<<u)][u]+d[v][u]); //int res=inf; // print(); // for (int i=0;i<n;i++) // res = min(res,dp[i][0]); printf("%d ",dp[(1<<n)⑴][0]); } int main() { //freopen("G:Code1.txt","r",stdin); while(scanf("%d",&n)!=EOF){ if (!n) break; init(); floyd(); //solve(); //solve2(); solve3(); } return 0; }

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 久久久久久国产精品免费免 | 久草在线视频福利资源站 | 久久久久久一品道精品免费看 | 91国内精品久久久久怡红院 | 美国特级成人毛片 | 国产日韩视频在线观看 | 999热成人精品国产免 | 欧美成人精品高清在线播放 | 碰在线公开超 | 欧美jizzhd精品欧美巨大 | 最近中文字幕完整视频大全版 | 亚洲视频在线看 | 亚洲欧洲日产国码二区在线 | 美国美女一级毛片免费全 | 国内精品久久久久久影院8f | seba51久久精品 | 亚洲黄色小说图片 | wwwxxx欧美| 日韩精品免费一级视频 | 午夜岛国 | 天天视频官网天天视频在线 | 欧美 日韩 中字 国产 | 视频免费 | 伊人丁香婷婷综合一区二区 | 欧美成人精品不卡视频在线观看 | 天天视频国产 | 亚洲欧美一级夜夜爽w | 日韩欧美国产成人 | 性做久久久久久网站 | 亚洲欧美日韩高清一区二区一 | 亚洲天堂网在线播放 | 亚洲高清二区 | 国产一区二区免费不卡在线播放 | 波多野结衣免费观看视频 | 欧美极品video粗暴 | 欧美一二区 | 日韩一区二区视频在线观看 | 巨大欧美黑人xxxxbbbb | 亚洲精品自拍视频 | 国产裸舞福利在线视频合集 | 午夜久久久久久久 |