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