-
A - Por Costel and Azerah
- Gym - 100923A
-
#include <iostream> #include <stdio.h> #include <cmath> using namespace std; #define maxn 1000052 #define ll long long #define md 1000000007 ll t,n,x,dp[maxn][5]; int main() { freopen("azerah.in","r",stdin); freopen("azerah.out","w",stdout); scanf("%lld",&t); while(t--) { scanf("%lld",&n); dp[0][1]=0; dp[0][0]=1; for(ll i=1; i<=n; i++) { scanf("%lld",&x); if(x%2==0) { dp[i][0]=(2*dp[i-1][0])%md; dp[i][1]=2*dp[i-1][1]%md; //重组替换两种操作。 } else dp[i][1]=dp[i][0]=(dp[i-1][1]+dp[i-1][0])%md; } printf("%lld\n",dp[n][0]-1); } return 0; }
A - Por Costel and Azerah-dp求和
最新推荐文章于 2019-08-17 23:45:00 发布
本文深入探讨了使用C++实现动态规划算法解决特定问题的方法。通过实例代码,详细讲解了如何利用动态规划求解涉及组合和替换操作的问题,特别关注了在不同输入条件下状态转移方程的构建与优化。
241

被折叠的 条评论
为什么被折叠?



