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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

B - A Funny Bipartite Graph

發(fā)布時間:2023/12/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 B - A Funny Bipartite Graph 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

B - A Funny Bipartite Graph

題意:

一個二分圖,左右各有n個點,左邊第i個點有一個屬性mi,它在一個圖中的價值為midi,其中di為它在圖中的度數(shù)(特殊的,如果度數(shù)為0,則價值為0),求一個該二分圖的子圖使得右邊的每個點度數(shù)都不為0且總價值最小,輸出最小價值。如果無解輸出?1
有若干個限制條件(i,j)表示子圖中左邊的點i和j不能同時存在
保證:
原二分圖中左邊的每個點度數(shù)在[1,3]之間。
左邊的i點和右邊的j點連線當(dāng)且僅當(dāng)i ≤ j
n<=18
mi<=100

題解:

參考題解:
文章1
文章2
這個題的思路非常妙
首先根據(jù)數(shù)據(jù)范圍確定方法為狀壓dp
我們既要維護(hù)左側(cè)的點,也有維護(hù)右側(cè)的點,兩側(cè)都是n,我們都用二進(jìn)制取枚舉,那么復(fù)雜度就是n * 22n,這樣肯定不行,要先辦法優(yōu)化
注意題目中有說左側(cè)的i選右側(cè)的j,當(dāng)且僅當(dāng)i<=j,也就是說當(dāng)我們考慮左側(cè)的第i個點時,左側(cè)的后n-i個還沒選,右側(cè)的前i個點必須全選(不然往后再也選不了),也就是說左側(cè)的后n-i位和右側(cè)的前i位都沒啥用,所有我們可以將左側(cè)的前i位和右側(cè)的后n-i位拼成一起,這樣2n就可以存下,復(fù)雜度就是O(n*2n)
這波操作就相當(dāng)于計組里面將32 位整數(shù)乘除法,它把乘數(shù)和結(jié)果同時存在了一個 64 位整數(shù)上
妙哉妙哉
思路很難,代碼也很難。。代碼之后更新

代碼:

#include<bits/stdc++.h> #define ll long long using namespace std; const int inf = 0x3f3f3f3f; int dp[2][1<<18]; int val[20], ban[20]; vector<int> g[20]; char s[20]; int n; void init(){scanf("%d", &n);for(int i = 0; i < n; ++i) g[i].clear();for(int i = 0; i < n; ++i) {scanf("%s", s);for(int j = 0; j < n; ++j) if(s[j] == '1') g[i].push_back(j);}for(int i = 0; i < n; ++i) {scanf("%s", s); ban[i] = 0;for(int j = 0; j < i; ++j) if(s[j] == '1') ban[i] |= (1<<j);}for(int i = 0; i < n; ++i) scanf("%d", &val[i]); } int sol(){int cur = 0, nxt = 1;memset(dp, 0x3f, sizeof dp);dp[cur][0] = 0;for(int i = 0; i < n; ++i){for(int mask = 0; mask < (1<<n); ++mask){int lstate = mask&((1<<i)-1);int rstate = mask&((1<<n)-(1<<i));if(dp[cur][mask] == inf) continue;// don't choose iif(rstate>>i&1) dp[nxt][(mask)^(1<<i)] = min(dp[nxt][(mask)^(1<<i)], dp[cur][mask]);if(ban[i]&lstate) continue;//can't choose ifor(int t = 1; t < (1<<g[i].size()); ++t){int cost = 1;int ex = 0;for(int j = 0; j < g[i].size(); ++j){int v = g[i][j];if(t>>j&1) cost *= val[i], ex |= 1<<v;}int nstate = rstate|ex;if( !(nstate>>i&1) ) continue;int sumstate=lstate|nstate;dp[nxt][sumstate] = min(dp[nxt][sumstate], dp[cur][mask] + cost);}}swap(cur, nxt);memset(dp[nxt], 0x3f, sizeof dp[nxt]);}int ans = inf;for(int i = 0; i < (1<<n); ++i) ans = min(ans, dp[cur][i]);if(ans == inf) return -1;return ans; } int main() {int T;cin>>T;while(T--){init();cout<<sol()<<endl;} } 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的B - A Funny Bipartite Graph的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 蜜桃av乱码一区二区三区 | 国产特级淫片免费看 | 国产三级在线免费 | 精品人妻无码一区二区色欲产成人 | 国产丝袜一区二区三区 | 浪浪视频在线观看 | 久久精品女人 | 久久精品无码人妻 | 麻豆精品网站 | 婷婷四月 | 深夜视频一区二区 | 久久无码精品丰满人妻 | 成人欧美在线观看 | 日韩一区二区av | 少妇太爽了 | 国产黑丝在线 | 亚洲一区二区播放 | 日韩经典一区二区 | 国产a级黄色 | 三级免费黄录像 | 亚洲精品天堂在线 | 性高潮久久久久久久久久 | 国产第99页 | 亚洲第一天堂影院 | 欧洲天堂网 | 丁香网五月天 | 精品国产av一区二区三区 | 人妻精品无码一区二区三区 | 一区二区内射 | 精品国产一区二区三区四区阿崩 | 欧美色一区二区三区在线观看 | 老头把女人躁得呻吟 | 亚洲国产日韩在线观看 | 欧洲一级片 | 青青色在线视频 | 男人av网 | 日韩欧美一区二区区 | 国产又黄又粗的视频 | 精品无码久久久久久久 | 麻豆www | 国产精品亚洲AV色欲三区不卡 | 黄页视频在线免费观看 | 国产免费一区二区视频 | 精品成人av一区二区三区 | 肉大捧一进一出免费视频 | 7777av| 久久久久久久久久久丰满 | 五月天激情视频在线观看 | 日本在线网站 | 高中男男gay互囗交观看 | 岳乳丰满一区二区三区 | 亚洲高清视频在线观看 | 国产精品123区 | 91久久久久久久久久久久久 | 亚洲美女自拍偷拍 | 免费黄色国产 | 亚洲最大的成人网站 | 久久艹中文字幕 | 国产二级毛片 | 久热一区 | 日本a级片网站 | 日日日日干| 国产3区 | 日韩欧美国产精品 | 男人疯狂高潮呻吟视频 | 99爱视频| 天天伊人网 | 91精品国产综合久久久久久久 | 久久蜜臀精品av | 精品欧美一区二区三区 | 91av麻豆| 骚狐网站 | 污污小说在线观看 | 好吊操视频这里只有精品 | 亚洲一区二区高清 | 射精一区二区 | 久久av秘一区二区三区 | 精品中文一区二区三区 | 粗大黑人巨茎大战欧美成人 | 国产精品三级久久久久久电影 | 爱情岛论坛亚洲品质自拍 | 自拍三级视频 | 在线观看成人 | 欧美被狂躁喷白浆精品 | 中文字幕无码精品亚洲资源网久久 | 高清毛片aaaaaaaaa片 | 亚洲视频一区二区 | 精品久久久无码中文字幕边打电话 | 日韩美女啪啪 | 成av人片在线观看www | av网站在线播放 | av老司机福利 | 亚洲色图激情小说 | 国产三区精品 | 捆绑调教在线观看 | 五月婷婷色综合 | 日韩美女黄色 | 欧美高h视频 | 无码人妻精品一区二 |