pmshz在玩乙個益(ruo)智(zhi)的小遊戲,目的是開啟九盞燈所有的燈,這樣的遊戲難倒了pmshz。。。
這個燈很奇(fan)怪(ren),點一下就會將這個燈和其周圍四盞燈的開關狀態全部改變。現在你的任務就是就是告訴pmshz要全部開啟這些燈。
例如 0 1 1
1 0 0
1 0 1
點一下最中間的燈【2,2】就變成了
0 0 1
0 1 1
1 1 1
再點一下左上角的燈【1,1】就變成了
1 1 1
1 1 1
1 1 1
達成目標。最少需要2步。
輸出2即可。
輸入格式:
九個數字,3*3的格式輸入,每兩個數字中間只有乙個空格,表示燈初始的開關狀態。(0表示關,1表示開)
輸出格式:
1個整數,表示最少開啟所有燈所需要的步數。
輸入樣例#1: 複製
0 1 11 0 0
1 0 1
輸出樣例#1: 複製
2
這個題水不水,就看你怎麼考慮了。。。。
思路:看資料範圍,n*n==9,所以如果搜尋的話,時間複雜度為2^9可以跑過去。
#include#include#include
#include
using
namespace
std;
int ans=0x7f7f7f7f
;bool map[10][10],vis[10][10
];bool
judge()
void dfs(int
sum)
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
if(!vis[i][j])
}int
main()
但是我們要談就更優異的演算法,我們知道,改變一盞偶數次,相當於沒有改變,而改變基數詞,相當於改變一次。所以這個題目可以轉成二進位制。
**見這裡
。
P2040開啟所有的燈
例如 0 1 1 1 0 0 1 0 1點一下最中間的燈 2,2 就變成了 0 0 1 0 1 1 1 1 1再點一下左上角的燈 1,1 就變成了 1 1 1 1 1 1 1 1 1達成目標。最少需要2步。輸出2即可。輸入格式 九個數字,3 3的格式輸入,每兩個數字中間只有乙個空格,表示燈初始的開關...
P2040 開啟所有的燈
pmshz在玩乙個益 ruo 智 zhi 的小遊戲,目的是開啟九盞燈所有的燈,這樣的遊戲難倒了pmshz。這個燈很奇 fan 怪 ren 點一下就會將這個燈和其周圍四盞燈的開關狀態全部改變。現在你的任務就是就是告訴pmshz要全部開啟這些燈。例如0 1 1 1 0 0 1 0 1點一下最中間的燈 2...
洛谷 P5445 路燈
題意見洛谷。首先考慮實時維護 forall i,j in 1,n 目前有多少時刻滿足能從 i 到達 j 顯然,i 能到達 j 當且僅當 i,j 在同乙個亮燈連續段裡。將當前狀態剖成若干個極大亮燈連續段,那麼能否到達關於 i,j 兩維的函式應該是由這些連續段,每段分別在 i 軸和 j 軸上作為兩條鄰邊...