6316 djq的朋友圈

2021-09-26 09:35:32 字數 2094 閱讀 4044

乙個整數表示最多的盟友數。

樣例1 中,如果順序為「7,2,3」,可以使得 2,3,4,5 都和 djq 成為盟友。

狀壓dp。

我們設與1相鄰的點為a集合,與a集合相鄰的不在a集合且不是1的點為b集合。

除去ab兩個集合其他的數可以不看。

設f[ s ]表示a集合中的狀態所能獲得最大盟友數量。

f[s]=f[ s-i ]+與 i 相鄰的b集合中和1與 i 之間的關係相同的數的個數。

這樣只能通過70%的資料。

我們發現|a|+|b|只有41,那麼當|a|超過了20時,我們就可以用b集合來做狀壓。

設g[s]表示b集合中的狀態所能獲得最大盟友數量。

列舉a集合中的i,我們可以用a集合中i相鄰的b集合中不在s轉態中的點更新乙個新的s',即g[s']=g[s]+k.

注意到這樣時間是o(2^n*n^2),我們可以預處理出所有與a集合中第i個數相鄰的b集合的狀態為s時的盟友數,轉移直接加上任意乙個盟友,這樣我們就可以優化掉乙個n了。

時間複雜度o(2^n*n)。

#include#include#include#define mem(a,b) memset(a,b,sizeof(a))

#define i int

#define f(i,a,b) for(i i=a;i<=b;++i)

#define rt return

#define p(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout);

#define m 1200

#define n 45

using namespace std;

void rd(i &x)

}i n,m,x,y,z,st,cnt=0,t[m],h[n],id[n],a[n],b[n],bz[n],s[m],p[n],nx[m],lim[n],v[n][n],f[1048586],g[43][1048586];

void add(i x,i y,i z)

i log(i x)rt len;}

void work()

f(i,1,a[0]) if(((s>>i-1)&1)==0)

} printf("%d\n",f[(1<

}i main()

mem(f,-0x3f3f);f[0]=0;bz[1]=1;

for(i k=h[1];k;k=nx[k])

if(a[0]<=20) work();

else doit();

rt 0;

}

朋友圈分析1

conding utf 8 from wxpy import from pyecharts import pie,bar 1 建立機械人 bot bot cache path true 2 查詢朋友 friends bot.friends search 1 3 朋友總數 total len frie...

社交名片 朋友圈

序 不管你是否承認 現在朋友圈已經間接代表你的一些個人形象 為什麼要維護朋友圈 很多人會說 朋友圈是我自己的 我想發什麼就發什麼 或者乾脆就不發朋友圈 聽起來很有道理 其實不然 朋友圈這三個字的含義就是 圍繞你聚集起的乙個朋友圈子 少則幾百人 多則幾千人 所以這並不是你乙個人的私人領地 有時候你發一...

7 25 朋友圈(25 分)

7 25 朋友圈 25 分 某學校有n個學生,形成m個俱樂部。每個俱樂部裡的學生有著一定相似的興趣愛好,形成乙個朋友圈。乙個學生可以同時屬於若干個不同的俱樂部。根據 我的朋友的朋友也是我的朋友 這個推論可以得出,如果a和b是朋友,且b和c是朋友,則a和c也是朋友。請編寫程式計算最大朋友圈中有多少人。...