hdu5965 dp枚举
2016-11-09 18:16
204 查看
http://acm.hdu.edu.cn/showproblem.php?pid=5965
用num[i]表示第i个格子里的数,dp[i]表示第i列有多少个雷,由dp[i]=num[i]-dp[i-1]-dp[i-2],枚举第一个格子里的雷可能的数量
用num[i]表示第i个格子里的数,dp[i]表示第i列有多少个雷,由dp[i]=num[i]-dp[i-1]-dp[i-2],枚举第一个格子里的雷可能的数量
#include <iostream> #include <cstdio> #include <cstring> using namespace std; typedef long long ll; const int maxn=10005; const int mod=1e8+7; char s[maxn]; int num[maxn],dp[maxn]; int main() { int T; scanf("%d",&T); while(T--) { scanf("%s",s); int n=strlen(s); memset(dp,0,sizeof(dp)); for(int i=0; i<n; i++) num[i+1]=s[i]-'0'; memset(dp,0,sizeof(dp)); ll ans=0; for(int i=0; i<=num[1]; i++) { dp[1]=i; if(i>2)break; int j; for(j=2; j<=n; j++) { int k=num[j-1]-dp[j-1]-dp[j-2]; if(k>2||k<0) break; dp[j]=k; } if(j<=n)continue; if(dp[n-1]+dp !=num )continue; ll res=1; for(int i=1; i<=n; i++) { if(dp[i]==1) res*=2; res%=mod; } ans+=res; ans%=mod; } printf("%d\n",ans); } return 0; }
相关文章推荐
- uva 11088 暴力枚举子集/状压dp
- uva - 11825(高效枚举集合dp)
- hdu 3681 二分枚举答案+dp判断答案
- 【HDU3341】AC自动机状态压缩DP,或者说hash枚举DP,-------出题人卡常数都是狗!!!!!
- POJ2479【DP 枚举】
- UVA 1252-Twenty Questions(状态压缩DP+子集枚举)
- SCU 4488 king's trouble II(dp||枚举)
- hdu 4733 G(x) (dp+枚举)
- HDU1506------据说是DP,我更觉得是简单的枚举
- HDU 3586 Information Disturbing (枚举+树形DP)
- [枚举][dp]JZOJ P3601——Tree
- hdu 6049 Sdjpx Is Happy(区间DP+暴力枚举)
- HDU--5280(dp或枚举)
- 【Coder Force】#360B - Levko and Array(DP 二分枚举)
- hdu5492 2015ACM合肥网赛题 最小方差路径 枚举+简单dp
- bzoj 1912: [Apio2010]patrol 巡逻【不是dp是枚举+堆】
- SCU 4488 king's trouble II(dp||枚举)
- HDU5965 扫雷 —— dp递推
- POJ 1837 Balance(01背包变形, 枚举DP)
- (POJ 1054)The Troublesome Frog <暴力枚举+剪枝 || DP>