輸入格式:
第一行為n,第二行有n個數,依次為第二列的格仔中的數。(1<= n <= 10000)
輸出格式:
乙個數,即第一列中雷的擺放方案數。
輸入樣例#1:
2輸出樣例#1:1 1
2演算法1:
列舉左邊每個位置是否有雷,複雜度o(2^n*n)。
演算法2:
我們發現,當前兩個位置確定時,後面的位置也就可以推出來了。
於是我們可以只列舉前兩位。
複雜度o(n)
#include#include#include
using
namespace
std;
int n,num[10010],a[10010
];bool mine[10010
],flag;
intmain()
if(num[1]==2
) }
if(flag==1)
a[n]+=mine[n-1];a[n]+=mine[n];
if(a[n]==num[n])
else
}if(num[1]==1
) }
if(flag!=1)
memset(mine,
0,sizeof
(mine));
memset(a,
0,sizeof
(a));
mine[
1]=0;mine[2]=1
; a[
1]=1
;
for(int i=2;i<=n-1;i++)
}if(flag!=1)
printf("%d
",ans);return0;
}if(num[1]==0
) }
if(flag==1)
a[n]+=mine[n-1];a[n]+=mine[n];
if(a[n]==num[n])
else}}
洛谷 P2327 SCOI2005 掃雷
看起來我做的和其他題解不一樣 那就發一篇吧 首先本題情況看似無厘頭,但是仔細觀察,不難發現 我們可以假設第一種情況,接著可以推出第二種 然後有了兩個已知的後,第三個顯而易見 如果你要問我怎麼推出來的嗎,我在裡面說的的邏輯判斷已經很明白了 include include include include...
洛谷P2327 SCOI2005 掃雷
輸入格式 第一行為n,第二行有n個數,依次為第二列的格仔中的數。1 n 10000 輸出格式 乙個數,即第一列中雷的擺放方案數。輸入樣例 1 2 1 1 輸出樣例 1 2迷之dp,如果沒看演算法標籤,可能會想岔到數學方向。乙個數字會影響它正左 左上 左下三個格仔的方案。考慮左邊和左上兩個方向的地雷數...
P2327 SCOI2005 掃雷 模擬
輸入格式 第一行為n,第二行有n個數,依次為第二列的格仔中的數。1 n 10000 輸出格式 乙個數,即第一列中雷的擺放方案數。輸入樣例 1 2 1 1 輸出樣例 1 2 思路 可根據左邊第乙個格仔和右邊第乙個格仔的方案 放or不放 推出左邊第二個格仔的方案,以此類推,最終可以推出左邊n個格仔的方案...