hdu 5965 掃雷(動態規劃)
阿新 • • 發佈:2018-12-16
列舉每一列的雷的數量,只有012三種情況,1的情況有2種方式
那麼我們就可以根據前2列的情況來推出第三列雷的數量的情況
#include<bits/stdc++.h> using namespace std; #define ll long long int const int maxn=1e4+10; const int mod=1e8+7; int T; char a[maxn]; int b[maxn]; int dp[maxn]; int main() { int T; scanf("%d",&T); while(T--) { scanf("%s",a); int len=strlen(a); for(int i=0;i<len;i++) { b[i+1]=a[i]-'0'; } ll ans=0; for(int i=0;i<=min(2,b[1]);i++) { memset(dp,0,sizeof(dp)); dp[1]=i; bool flag=true; ll res=1; //cout<<i<<' '; for(int j=2;j<=len;j++) { dp[j]=b[j-1]-dp[j-1]-dp[j-2]; //cout<<dp[j]<<' '; if(dp[j]<0||dp[j]>2) { flag=false; break; } if(dp[j]==1)res=res*2%mod; } if(dp[1]==1)res=res*2%mod; if(dp[len]+dp[len-1]!=b[len])flag=false; if(flag)ans=(ans+res)%mod; } printf("%lld\n",ans); } return 0; }