德瑪西亞是乙個實力雄厚、奉公守法的國家,有著功勳卓著的光榮軍史。
這裡非常重視正義、榮耀、職責的意識形態,這裡的人民為此感到強烈自豪。
有一天他們想去制裁**的比爾吉沃特,於是派遣了自己最優秀的戰士。
結果比爾吉沃特領土太小,只有長為n寬為m共計n*m塊土地,其中有些土
地標記為0表示為高山峻嶺或者深海湖泊,英雄們無法在其中站立,只有標
記為1的土地才能容納乙個英雄。德瑪西亞的英雄們戰鬥時有乙個特點,他
們不希望隊友站在自己旁邊顯得很曖昧。請問最多能有多少種安排德瑪西
亞英雄的方法?
輸入包含多組測試資料;
每組資料的第一行包含2個整數n和m (n <= 12, m <= 12 ),之間用空格隔開;
接下來的n行,每行m個數,表示n*m的比爾吉沃特領土。
輸出乙個整數n代表安排應用的方法。
(答案取膜100000000)
3 31 1 1
0 1 1
1 0 0
直覺動態規劃,一行一行遞推,看資料範圍猜狀壓dp。dp[
i][s
]dp[i][s]
dp[i][
s]表示第 i
ii 行狀態為 s
ss 的方案數,第二維的 s
ss 用二進位制01表示這一行的所有位置的狀態,0表示沒人,1表示有人。
從上一行遞推到下一行,首先當前這一行上狀態 s
ss 要滿足不相鄰,即(s & (s >> 1)) == 0
,而且還要滿足這一行上的地形條件(0不能站人,1才能站人),即(s & a[i]) == s
,這裡 a[i
]a[i]
a[i]
也是用二進位制01表示了一整行的狀態,需要提前處理。
當這個狀態 s
ss 滿足上述條件後,就可以從上一行的所有狀態 s′s'
s′轉移到當前狀態 s
ss,需要滿足同一列上不能同時有人,即(s & s') == 0
,dp[
i][s
]=∑d
p[i−
1][s
′]
dp[i][s]=\sum
dp[i][
s]=∑
dp[i
−1][
s′]。
#include
using
namespace std;
const
int mod =
100000000
;int n, m;
int a[15]
;int dp[15]
[1<<15]
;//第二維表示這一行的所有位置的狀態,用二進位制01表示
intmain()
}memset
(dp,0,
sizeof
(dp));
for(
int i =
1; i <= n; i++)}
}}}}
int ans =0;
for(
int i =
0; i <(1
<< m)
; i++
) ans =
(ans + dp[n]
[i])
% mod;
cout << ans << endl;
}return0;
}
nc 監聽資料 linux包之nc之nc命令
nc 1.84 22.el6.x86 64 不用系統上提供的nc版本會有所不同,其提供的引數使用方法也略有差異 nc v w 1 192.168.2.10 z 1 65535 grep succeeded 埠掃瞄 1.4 強制使用ipv4 2.6 強制使用ipv6 3.d 允許socket通訊返回d...
nc命令介紹
名字 nc 連線 監聽任意的tcp和udp。概要 nc 46ddhklnrstuuvzc i 間隔 p 源埠 s 源ip位址 t 服務型別 w 超時時間 x 協議 x 位址 埠 主機名 埠 s 詳細說明 nc netcat 的功能使用是涉及到tcp或者udp的時候。它可以開啟tcp連線,傳送udp包...
nc命令說明
一,什麼是nc nc是netcat的簡寫,因為它短小精悍 功能實用,被設計為乙個簡單 可靠的網路工具 二,nc的作用 1 實現任意tcp udp埠的偵聽,nc可以作為server以tcp或udp方式偵聽指定埠 2 埠的掃瞄,nc可以作為client發起tcp或udp連線 3 機器之間傳輸檔案 4 機...