東莞市選 格鬥俱樂部(區間dp)

2021-08-18 16:19:47 字數 810 閱讀 1877

【輸出】

輸出包含n行,每行為乙個整數「0」或「1」,「1」表示第i號選手有可能成為冠軍,「0」表示不可能。

【輸入輸出樣例1】

data.in

3 0 1 1

0 0 1

0 0 0

data.out

1 0

0區間dp嘛,狀態轉移也好想,設 f[ i ][ j ][ k ]表示第 i 個人到第 j 個人打完時第 k 個人能不能活著。所以:列舉中間節點 l ,對於每個 f[ i ][ l ]中可以打贏的那位 x,都和每個 f[ l+1 ][ j ]中可以打贏的那位 y 決一死戰,f[ i ][ j ][ winner ]=1。

比較麻煩、比較坑我的地方就是斷環為鏈的操作。見code吧。

但我程式跑得很慢,五重迴圈,林神好像有很玄學的做法。

先丟個題解鏈結,日後再看:

int n;

int f[100][100][100];

int res[100][100];

int ans[100];

void init()

void work_dp()

}for(int j=1;j<=n;++j)

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

ans[i]|=f[j][j+n-1][i]; //貫徹中心思想,原本還|f[j][j+n-1][i+n]來著,刪了也能過,仔細想想是一樣的嘛。

for(int i=1;i<=n;++i) printf("%d\n",ans[i]);

}

碰到環的,呃,多筆算一下吧。……

2014東莞市選 分組

file io input group.in output group.out time limits 1000 ms memory limits 262144 kb detailed limits special judge description 有n個字串,給這些字串分組,使得每個字串屬於且僅...

東莞市選2008 飛彈

這題的n很小。我們可以先用floyd求出兩兩之間的最小距離。然後要求最值,我們可以二分最長的距離。然後用匈牙利來判斷。將小於等於mid的邊新增 上標 include include include using namespace std struct nodee 10010 int k,n,m,f ...

2023年東莞市GDOI市選題第一題

第一題 數列 提交檔案 sequence.pas c cpp 輸入檔案 sequence.in 輸出檔案 sequence.out 問題描述 把乙個正整數分成一列連續的正整數之和。這個數列必須包含至少兩個正整數。你需要求出這個數列的最小長度。如果這個數列不存在則輸出 1。輸入格式 每行包含乙個正整數...