Vijos 1048 送給聖誕夜的賀卡(dfs)

2021-08-10 02:48:17 字數 1296 閱讀 9231

描述

輸入格式

第一行乙個數n。

第二行n個數,第i個數代表預選名單中第i號小精靈的書寫質量(均為非負整數)。

接下來有若干行,每行兩個不同的非負整數x和y,表示預選名單中第x號和第y號的小精靈曾經在賀卡書寫合作任務中發生過衝突。

輸出格式

第一行乙個數s。

樣例1樣例輸入1

3 4 2 5

1 2

copy

樣例輸出1

9 copy

限制各個測試點1s

提示1<=n<=50,1<=x,y<=n

思路:dfs+剪枝

題解:

#include

#include

#include

using

namespace

std;

bool vis[500];

int sum[500];

bool pd[500][500];

int ans=0;

int n;

struct cces[200000];//用鄰接表存一定要開大,有衝突的對數不確定。

int first[200000],nxt[200000];

int tot=0;

void build(int ff,int tt)

; nxt[tot]=first[ff];

first[ff]=tot;

}int val[500];

void dfs(int x,int now)

ans=max(ans,now);

if(x>n)

for(int i=0;i<=1;i++)

}vis[x]=1;

dfs(x+1,now+val[x]);

vis[x]=0;

}else

}}struct ffhhh[500];

int cmp(ff aa,ff bb)

int a[500];

int main()

sort(hhh+1,hhh+n+1,cmp);//按價值從大到小排序,極大減少複雜度。

for(int i=1;i<=n;i++)

int x,y;

while(scanf("%d%d",&x,&y)!=eof)

for(int i=1;i<=n;i++)

for(int i=n;i>=1;i--)

dfs(1,0);

printf("%d",ans);

return

0;}

vijos1048 送給聖誕夜的賀卡

vijos1048 表示不是很懂為什麼這個是七級題。這是一道不明複雜度的玄學搜尋題 大概是sigma i,1,n c i,n n 50 然而實際上過所有資料30ms不到 這裡我們用鄰接表來存衝突關係 enm表示當前狀態該節點有多少個與其衝突的人 然後dfs下去 這就是樸素的思路 inline voi...

vijos1048 送給聖誕夜的賀卡

題目 不看資料範圍一定想貪心系列 暴搜就可以了?然而不行 tle 於是考慮減枝 題目要求價值總和最大,就按大 小排序 就從最大的選 然而僅僅這樣複雜度不會降 需要配合字尾和食用 當發現目前已選 後面待選的總和 即都選 依然比目前答案要小時,不搜 因為已經按大小排過序了,搜到較大答案的時間靠前的可能性...

vijos1049 送給聖誕夜的禮品

題目大意 順次給出m個置換,反覆使用這m個置換對初始序列進行操作,問k次置換後的序列。m 10,k 2 31。題目分析 先將m個置換所使用的矩陣合併起來,然後做t k m次。剩下的k m次模擬即可。include include include include include include inc...