非常水
的一道題
非常水的一道題
非常水的一道
題 發現第i
ii個位置與第i−1
i-1i−
1和i+
1i+1
i+1有關
所以直接暴力思維dpdp
dp帶著所有狀態衝就是了
定義d p[
i][j
][q]
[w
]dp[i][j][q][w]
dp[i][
j][q
][w]
為d pdp
dp到第i
ii位時
i −1
i-1i−
1位是否有火(j)
(j)(j
),ii
i位置是否有火(q)
(q)(q
),i+
1i+1
i+1位置是否有火(w)
(w)(w
)
#include using namespace std;
#define int long long
const int maxn=1e6+10;
const int mod=1e9+7;
int n,m,dp[maxn][2][2][2];
char a[maxn];
signed main()
else if( a[i]=='2' )
dp[i][1][0][1]=dp[i-1][1][1][0]+dp[i-1][0][1][0];
else if( a[i]=='*' )
else
for(int j=0;j<=1;j++)
for(int q=0;q<=1;q++)
for(int w=0;w<=1;w++)
dp[i][j][q][w]%=mod;
} int ans=0;
for(int i=0;i<=1;i++)
for(int j=0;j<=1;j++)
ans = (ans+dp[n][i][j][0] )%mod;
cout << ans;
}
但是似乎可以優化掉一維
因為轉移的時候i−1
i-1i−
1是用不到的
在轉移狀態i
ii時,只需要i−1
i-1i−
1的**狀態和i
ii的**狀態
實際上只需要dp[
i][q
][w]
dp[i][q][w]
dp[i][
q][w
]即可
牛客 火 皇家烈焰 線性dp
題目大意 給出乙個字串表示掃雷遊戲,其中 0 這個格仔沒有烈焰,且其左右兩個格仔均沒有烈焰 1 這個格仔沒有烈焰,且其左右兩個格仔中只有乙個烈焰 2 這個格仔沒有烈焰,且其左右兩個格仔中均有烈焰 這個格仔有烈焰 未告訴你本格情況 要求計算一共有多少種方案可以滿足給出的情況 題目分析 因為看到結果要對...
牛客小白月賽19
a 水 滔天巨浪 includeusing namespace std int n int a 10004 b 100004 int main int ans 0 int hh 0 a 0 0 a n 1 1001 for int i 1 i n i printf d n hh b 木 迷霧森林 i...
牛客小白月賽19 弱版 C
題意 帕秋莉掌握了一種土屬性魔法 這種魔法可以在一片k k大小的乙個正方形區域內產生 但是如果某片即將產生 的區域內有建築物,帕秋莉會停止施法 整個地圖大小為n m,其中一些地方有建築 請問有多少種可能的情況,使得帕秋莉會停止施法 思路 二維字首和思想 記錄在任意的 k k 的區間內是否存在1 1 ...