Matches Puzzle Game
题目链接:
数位DP
首先我把C-A=B改为A+B=C(我觉得会简单一点<( ̄3 ̄)>)
注意到前面填的数字不影响后面的数字,所以可以定义状态:
dp[i][j][a][b]表示已经用了i根火柴,进位为j,A前面能否再加数字(a),B前面能否再加数字(b)
然后根据a和b的值进行分类讨论即可。
(最近期中考好烦啊好多事都没弄)
代码如下:
1 /*苟利国家生死已,岂因祸福避趋之*/ 2 #include3 #include 4 #include 5 #define MATCH 505 6 #define TOWARDS 2 7 #define FA 2//前止 8 #define FB 2 9 using namespace std;10 typedef long long LL;11 LL p[]={ 6,2,5,5,4,5,6,3,7,6};12 LL T,n,m,dp[MATCH][TOWARDS][FA][FB];13 void init(){14 memset(dp,0,sizeof(dp));15 dp[0][0][0][0]=1;16 scanf("%I64d%I64d",&n,&m);17 n-=3;18 }19 int main(void){20 scanf("%I64d",&T);21 for(LL times=1;times<=T;++times){22 init();23 for(LL i=0;i