1. 程式人生 > >圓桌遊戲(區間DP)

圓桌遊戲(區間DP)

2.圓桌遊戲
(game.cpp/c/pas)
【問題描述】
有一種圓桌遊戲是這樣進行的:n個人圍著圓桌坐成一圈,按順時針順序依次標號為1號至n號。對1<=i<=n的i來說,i號的左邊是i+1號,右邊是i-1號。1號的右邊是n號,n號的左邊是1號。每一輪遊戲時,主持人指定一個還坐在桌邊的人(假設是i號),讓他向坐在他左邊的人(假設是j號)發起挑戰,如果挑戰成功,那麼j離開圓桌,如果挑戰失敗,那麼i離開圓桌。當圓桌邊只剩下一個人時,這個人就是最終的勝利者。
事實上,勝利者的歸屬是與主持人的選擇息息相關的。現在,你來擔任圓桌遊戲的主持人,並且你已經事先知道了對於任意兩個人i號和j號,如果i向j發起挑戰,結果是成功還是失敗。現在你想知道,如果你可以隨意指定每輪發起挑戰的人,哪些人可以成為最終的勝利者?
【輸入】
第一行包含一個整數n,表示參加遊戲的人數;
接下來n行,每行包含n個數,每個數都是0或1中的一個,若第i行第j個數是1,表示i向j發起挑戰的結果是成功,否則表示挑戰結果是失敗。第i行第i列的值一定為0。
【輸出】
一行,包含若干個數,表示可能成為最終勝利者的玩家的標號。標號按從小到大的順序輸出,相鄰兩個數間用1個空格隔開。
【輸入輸出樣例1】
game.in game.out
3
0 1 0
0 0 1
0 1 0
1 3
【輸入輸出樣例1說明】
先指定2號向3號發起挑戰,3號離開;再指定1號向2號發起挑戰,2號離開。此時1號是最終勝利者。
先指定1號向2號發起挑戰,2號離開;再指定1號向3號發起挑戰,1號離開。此時3號是最終勝利者。
無論如何安排挑戰順序,2號都無法成為最終勝利者。
【資料規模與約定】
對於30%的資料,n≤7
對於100%的資料,n≤100

/*
區間DP.
啊這個題暴力可以30(懶~).
剛開始因為過分考慮過程so蒟蒻表示比較難想{{{(>_<)}}}
f[i][j]表示由i到j中間的參與者們能不能全部killed.
一開始f[i][i+1]=true.
然後判斷誰殺了誰區間DP.
*/
#include<iostream>
#include<cstdio>
#define MAXN 301
using namespace std;
int n,m,s[MAXN];
bool f[MAXN][MAXN],g[MAXN][MAXN];
int main()
{
    freopen("game.in"
,"r",stdin); freopen("game.out","w",stdout); scanf("%d",&n); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { scanf("%d",&g[i][j]); g[i+n][j]=g[i][j];g[i][j+n]=g[i][j];g[i+n][j+n]=g[i][j]; } for(int i=1;i<=2*n;i++) f[i][i+1]=true; for(int
i=1;i<=n;i++) s[i]=s[i+n]=i; for(int i=2*n;i>=1;i--) for(int j=i+1;j<=2*n;j++) for(int k=i;k<=j;k++) { if(f[i][k]&&f[k][j]&&(g[s[i]][s[k]]||!g[s[k]][s[j]])) { f[i][j]=true;break; } } for(int i=1;i<=n;i++) if(f[i][i+n]) printf("%d ",i); return 0; }

相關推薦

圓桌遊戲(區間DP)

2.圓桌遊戲 (game.cpp/c/pas) 【問題描述】 有一種圓桌遊戲是這樣進行的:n個人圍著圓桌坐成一圈,按順時針順序依次標號為1號至n號。對1<=i<=n的i來說,i號的左邊是i+1號,右邊是i-1號。1號的

【bzoj2121】字符串遊戲 區間dp

IT 進行 zoj 復雜度 highlight AC sof print bzoj 題目描述 給你一個字符串L和一個字符串集合S,如果S的某個子串在S集合中,那麽可以將其刪去,剩余的部分拼到一起成為新的L串。問:最後剩下的串長度的最小值。 輸入 輸入的第一行包含一個字

多邊形遊戲 /// 區間DP oj1903

最小 int 分享圖片 urn IT nbsp min open input 題目大意: ... Input 輸入的第一行是單獨一個整數n( 3 ≤ n ≤ 18 ),表示多邊形的頂點數(同時也是邊數)。 接下來第n行,每行包含一個運算符("+"或"*")和一個整數V[i

乘法遊戲 區間DP 【BOJ221】【Codevs1966】

Description 乘法遊戲是在一行NN張牌上進行的,每一張牌包括了一個正整數WiWi。在每一個移動中,玩家拿出一張牌,得分是用它的數字乘以它左邊和右邊的數,所以不允許拿第1張和最後1張牌。最後一次移動後,這裡只剩下兩張牌。你的目標是使得分的

codevs 1966 乘法遊戲 區間DP 解題報告

題目描述 Description 乘法遊戲是在一行牌上進行的。每一張牌包括了一個正整數。在每一個移動中,玩家拿出一張牌,得分是用它的數字乘以它左邊和右邊的數,所以不允許拿第1張和最後1張牌。最後一次移動後,這裡只剩下兩張牌。 你的目標是使得分的和最小。 例

Codevs1966 乘法遊戲 區間dp

跟石子歸併差不……多…? 好像所有的區間dp都差不多,然而我還是不會做。 狀態轉移方程:dp[i][j] = min(dp[i][j], dp[i][k]+dp[k][j]+num[i]*num

luogu P1005 矩陣取數遊戲 區間DP

區間 取數 class return bsp pan 取數遊戲 div 這一 每一行是獨立的,分開處理即可。 dp[i][j]表示[i,j]這一段,取完的最大收益。轉移很顯然,dp[i][j] = max(dp[i + 1][j] + 2^(m - (j - l)) *

Luogu P2734 遊戲 A Game 區間DP

註意 write pre lang str strong 裏的 var con P2734 遊戲 A Game 題目背景 有如下一個雙人遊戲:N(2 <= N <= 100)個正整數的序列放在一個遊戲平臺上,遊戲由玩家1開始,兩人

題解——洛谷P2734 遊戲A Game 題解(區間DP

表示 training 代碼 clas rain region str 所有 sample 題面 題目背景 有如下一個雙人遊戲:N(2 <= N <= 100)個正整數的序列放在一個遊戲平臺上,遊戲由玩家1開始,兩人輪流從序列的任意一端取一個數,取數後該數字

luogu1005矩陣取數遊戲題解--區間DP

max == turn org ons 區間 getchar https lin 題目鏈接 https://www.luogu.org/problemnew/show/P1005 分析 忽然發現這篇題解好像並沒有什麽意義。。。因為跟奶牛零食那道題一模一樣,博主比較懶如果您想

LUOGU 2734 遊戲 A Game [區間DP+博弈論]

2734 遊戲 A Game 題目背景 有如下一個雙人遊戲:N(2 <= N <= 100)個正整數的序列放在一個遊戲平臺上,遊戲由玩家1開始,兩人輪流從序列的任意一端取一個數,取數後該數字被去掉並累加到本玩家的得分中,當數取盡時,遊戲結束。以最終得分多者為勝

矩陣取數遊戲 noip 2007 [區間DP+高精]

矩陣取數遊戲 題目描述 帥帥經常跟同學玩一個矩陣取數遊戲:對於一個給定的n×m的矩陣,矩陣中的每個元素ai,j​均為非負整數。遊戲規則如下: 每次取數時須從每行各取走一個元素,共n個。經過m次後取完矩陣內所有元素; 每次取走的各個元素只能是該元素所在行的行首或行尾;

tyvjP1014乘法遊戲區間dp

輸入 6  10 1 50 50 20 5 輸出 3650 這是一道區間動規的題,dp[i][j]是以i為起點j為終點得到的最小分數,所以狀態轉移方程是:dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+num[i]*num[j]*num[k]) #include<

乘法遊戲(tyvj P1014)區間dp

區間dp,dp[i][j] = min ( 左右兩邊去掉的數計算的和 + 當前數a[k]*a[i]*a[j] ) #include<stdio.h> #include<iostre

區間DP】乘法遊戲

  ☆乘法遊戲 背景 Background 太原成成中學第2次模擬賽 第四道 描述 Description 乘法遊戲是在一行牌上進行的。每一張牌包括了一個正整數。在每一個移動中,玩家拿出一張牌,得分是用它的數字乘以它左邊和右邊的數,所以

小白演算法練習 區間dp 乘法遊戲

乘法遊戲是在一行牌上進行的。每一張牌包括了一個正整數。在每一個移動中,玩家拿出一張牌,得分是用它的數字乘以它左邊和右邊的數,所以不允許拿第1張和最後1張牌。最後一次移動後,這裡只剩下兩張牌。         你的目標是使得分的和最小。例如,如果數是10  1  50  20  5,依次拿1、20、50,總分是

P5154 數列遊戲區間dp

傳送門 果然和dp有關的東西我絕對做不出來啊…… 設\(dp[i][j]\)表示消完區間\([i,j]\)中的數之後能得到的最大分數,如果消不完則為\(-inf\),否則列舉斷點。順便如果\(a[i],a[j]\)不互質可以用\(dp[i+1][j-1]+b[i]+b[j]\)來更新答案 然後設\(f[i]

P1043 數字遊戲-動態規劃,區間dp

丁丁最近沉迷於一個數字遊戲之中。這個遊戲看似簡單,但丁丁在研究了許多天之後卻發覺原來在簡單的規則下想要贏得這個遊戲並不那麼容易。遊戲是這樣的,在你面前有一圈整數(一共n個),你要按順序將其分為m個部分,各部分內的數字相加,相加所得的m個結果對10取模後再相乘,最終得到一個數

【日常學習】【區間DP+高精】codevs1166 矩陣取數遊戲題解

題目來自NOIP2007TG3 如果在考場上我現在已經歇菜了吧 今天一整天的時間全部投在這道題上,收穫不小。 先上題目 題目描述 Description 【問題描述】 帥帥經常跟同學玩一個矩陣取數遊戲:對於一個給定的n*m 的矩陣,矩陣中的每個元素aij均 為非

區間DP code[vs]1258 關路燈

兩個 輸出 sample flask cst ostream 所有 %d 整數 1258 關路燈 時間限制: 1 s 空間限制: 128000 KB 題目等級 : 大師 Master 題目描述 Descriptio