标签:ini start tor lock color i++ turn open art
题目链接:hdu_5965_扫雷
题意:
中文,还是自己看吧。
题解:
现场赛这题用的状压DP过的,不过现在想想当时还确实想复杂了,冷静下来仔细思靠一下,其实第i-1个确定了,那么第i个也是确定的,可以递推出来。
设dp[i]表示第i列的雷数,然后枚举一下第一列的雷数,就可以推出所有的雷,然后算一下贡献
1 #include<bits/stdc++.h> 2 #define F(i,a,b) for(int i=a;i<=b;i++) 3 using namespace std; 4 5 const int N=1e4+7,P=1e8+7; 6 7 char s[N]; 8 int num[N],dp[N],t,ans,n; 9 10 int main() 11 { 12 scanf("%d",&t); 13 while(t--) 14 { 15 scanf("%s",s+1),ans=0; 16 n=strlen(s+1); 17 for(int i=1;i<=n;i++)num[i]=s[i]-‘0‘; 18 F(i,0,num[1]) 19 { 20 dp[1]=i; 21 if(i>2)break; 22 int j; 23 for(j=2;j<=n;j++) 24 { 25 int now=num[j-1]-dp[j-1]-dp[j-2]; 26 if(now>2||now<0)break; 27 dp[j]=now; 28 } 29 if(j<=n||dp[n-1]+dp[n]!=num[n])continue; 30 int an=1; 31 F(j,1,n)if(dp[j]==1)an*=2,an%=P; 32 ans+=an,ans%=P; 33 } 34 printf("%d\n",ans); 35 } 36 return 0; 37 }
标签:ini start tor lock color i++ turn open art
原文地址:http://www.cnblogs.com/bin-gege/p/6033731.html