HDU-4249-A Famous Equation(DP)
Unfortunately, there may be more than one way to complete the equation. For example “1?3+??1=44?” can be completed to “123+321=444” , “143+301=444” and many other possible solutions. Your job is to determine the number of different possible solutions.
number is no more than 9. In the other words, the equation will contain three integers less than 1,000,000,000.
7+1?=1?
? 1+?1=22
Case 1: 3
Case 2: 1HintThere are three solutions for the first case:
7+10=17, 7+11=18, 7+12=19
There is only one solution for the second case:
11+11=22
Note that 01+21=22 is not a valid solution because extra leading zeros are not allowed.
坑点:①long long。
②前导零。③1+1=2这样的情况结果为1。加特判还WA了。④细节。
。
。
#include<stdio.h>
#include<string.h> char a[50],b[50],c[50],s[100];
long long dp[10][2]; int main()
{
int la,lb,lc,i,j,k,now,p,q,jp,jq,cas=1; while(~scanf("%s",s))
{
for(i=0;s[i];i++) if(s[i]=='+' || s[i]=='=') s[i]=' '; sscanf(s,"%s%s%s",a,b,c); la=strlen(a)-1;
lb=strlen(b)-1;
lc=strlen(c)-1; dp[0][0]=1;
dp[0][1]=0; now=1; while(la>=0 || lb>=0 || lc>=0)
{
p=q=jp=jq=0; if(la>=0 && a[la]=='? ')
{
for(i=0;i<=9;i++)
{
if(!la && now>1 && !i) continue; if(lb>=0 && b[lb]=='?')
{
for(j=0;j<=9;j++)
{
if(!lb && now>1 && !j) continue; if(lc>=0 && c[lc]=='?')
{
for(k=0;k<=9;k++)
{
if(!lc && now>1 && !k) continue; if(i+j==k) p++;
if(i+j==k-1) jp++;
if(i+j-10==k) q++;
if(i+j-10==k-1) jq++;
}
}
else
{
if(lc>=0) k=c[lc]-'0';
else k=0; if(i+j==k) p++;
if(i+j==k-1) jp++;
if(i+j-10==k) q++;
if(i+j-10==k-1) jq++;
}
}
}
else
{
if(lb>=0) j=b[lb]-'0';
else j=0; if(lc>=0 && c[lc]=='?')
{
for(k=0;k<=9;k++)
{
if(!lc && now>1 && !k) continue; if(i+j==k) p++;
if(i+j==k-1) jp++;
if(i+j-10==k) q++;
if(i+j-10==k-1) jq++;
}
}
else
{
if(lc>=0) k=c[lc]-'0';
else k=0; if(i+j==k) p++;
if(i+j==k-1) jp++;
if(i+j-10==k) q++;
if(i+j-10==k-1) jq++;
}
}
}
}
else
{
if(la>=0) i=a[la]-'0';
else i=0; if(lb>=0 && b[lb]=='?')
{
for(j=0;j<=9;j++)
{
if(!lb && now>1 && !j) continue; if(lc>=0 && c[lc]=='?')
{
for(k=0;k<=9;k++)
{
if(!lc && now>1 && !k) continue; if(i+j==k) p++;
if(i+j==k-1) jp++;
if(i+j-10==k) q++;
if(i+j-10==k-1) jq++;
}
}
else
{
if(lc>=0) k=c[lc]-'0';
else k=0; if(i+j==k) p++;
if(i+j==k-1) jp++;
if(i+j-10==k) q++;
if(i+j-10==k-1) jq++;
}
}
}
else
{
if(lb>=0) j=b[lb]-'0';
else j=0; if(lc>=0 && c[lc]=='?')
{
for(k=0;k<=9;k++)
{
if(!lc && now>1 && !k) continue; if(i+j==k) p++;
if(i+j==k-1) jp++;
if(i+j-10==k) q++;
if(i+j-10==k-1) jq++;
}
}
else
{
if(lc>=0) k=c[lc]-'0';
else k=0; if(i+j==k) p++;
if(i+j==k-1) jp++;
if(i+j-10==k) q++;
if(i+j-10==k-1) jq++;
}
}
} dp[now][0]=dp[now-1][0]*p+dp[now-1][1]*jp;
dp[now][1]=dp[now-1][0]*q+dp[now-1][1]*jq; now++; la--;
lb--;
lc--;
} printf("Case %d: %I64d\n",cas++,dp[now-1][0]);
}
}
版权声明:本文博客原创文章,博客,未经同意,不得转载。
HDU-4249-A Famous Equation(DP)的更多相关文章
- HDOJ 4249 A Famous Equation DP
DP: DP[len][k][i][j] 再第len位,第一个数len位为i,第二个数len位为j,和的第len位为k 每一位能够从后面一位转移过来,能够进位也能够不进位 A Famous Equat ...
- HDU 4249 A Famous Equation(数位DP)
题目链接:点击打开链接 思路:用d[i][a][b][c][is]表示当前到了第i位, 三个数的i位各自是a,b,c, 是否有进位 , 的方法数. 细节參见代码: #include<cstdio ...
- HDU 4294 A Famous Equation(DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4249 题目大意:给一个a+b=c的表达式,但是a.b.c中部分位的数字丢失,并用?代替,问有多少种方案 ...
- HDU 1003 Max Sum --- 经典DP
HDU 1003 相关链接 HDU 1231题解 题目大意:给定序列个数n及n个数,求该序列的最大连续子序列的和,要求输出最大连续子序列的和以及子序列的首位位置 解题思路:经典DP,可以定义 ...
- hdu 5094 Maze 状态压缩dp+广搜
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092176.html 题目链接:hdu 5094 Maze 状态压缩dp+广搜 使用广度优先 ...
- hdu 2829 Lawrence(斜率优化DP)
题目链接:hdu 2829 Lawrence 题意: 在一条直线型的铁路上,每个站点有各自的权重num[i],每一段铁路(边)的权重(题目上说是战略价值什么的好像)是能经过这条边的所有站点的乘积之和. ...
- hdu 4568 Hunter 最短路+dp
Hunter Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- HDU 1231.最大连续子序列-dp+位置标记
最大连续子序列 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- HDU 1078 FatMouse and Cheese ( DP, DFS)
HDU 1078 FatMouse and Cheese ( DP, DFS) 题目大意 给定一个 n * n 的矩阵, 矩阵的每个格子里都有一个值. 每次水平或垂直可以走 [1, k] 步, 从 ( ...
随机推荐
- python类继承时构造函数的运行问题
假设子类定义了自己的__init__构造方法函数.当子类的实例对象被创建时,子类仅仅会运行自己的__init__方法函数.假设子类没有定义自己的构造方法函数.会沿着搜索树找到父类的构造方法函数去运行父 ...
- generating permunation——全排列(算法汇总)
本文一共提供了4种全排列的方法,包括递归非字典序版本.递归字典序版本.标准库版本和BFS字典序版本,当然BFS非字典序实现相对于BFS字典序版本更加简洁,稍加修改即可. 说明:递归版本基于网上现有代码 ...
- [CSS] Design for Mobile First with Tachyons
Tachyons provides extensions (-ns, -m, and -l) to many of its classes to help you design for respons ...
- IAdjustCountOption--动态设置recycleView的itemCount(不须要改动数据源)
概述 RecycleViewUtil是新增的一个主要针对RecycleView的一个工具类.该工具类中提供了部分RecycleView可能会使用到的方法,当中也包含了一些用来增强HeaderRecyc ...
- Hadoop入门经典:WordCount 分类: A1_HADOOP 2014-08-20 14:43 2514人阅读 评论(0) 收藏
以下程序在hadoop1.2.1上测试成功. 本例先将源代码呈现,然后详细说明执行步骤,最后对源代码及执行过程进行分析. 一.源代码 package org.jediael.hadoopdemo.wo ...
- Lucene学习总结之八:Lucene的查询语法,JavaCC及QueryParser 2014-06-25 14:25 722人阅读 评论(1) 收藏
一.Lucene的查询语法 Lucene所支持的查询语法可见http://lucene.apache.org/java/3_0_1/queryparsersyntax.html (1) 语法关键字 + ...
- jquery修改获取radio的选中项
<input id="txtBeginDate" onclick="$('#divDate').css({'top':$('#txtBeginDate').offs ...
- UE4的JSON读写方式<一>
声明:所有权利保留. 转载必须说明出处:http://blog.csdn.net/cartzhang/article/details/41009343 UE4的Json的解析博客地址: http:// ...
- 【u010】银河英雄传说
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开 ...
- js进阶 11-4/5 jquery中css的类的操作有哪些
js进阶 11-4/5 jquery中css的类的操作有哪些 一.总结 一句话总结:jquery中css的类的操作有增删切三种. 1.jquery中css的类的操作有哪些? 增删切三种 addCla ...