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] 步, 从 ( ...
随机推荐
- 基于Maven,Spring+ActiveMQ实现,贴近实际
本文只实现了Topic,queue改点配置就行了 一.pom依赖 Spring的太长了,具体可以看下面源码里面 <dependency> <groupId>org.apache ...
- Linux下kill进程脚本
Linux下kill进程脚本 在Linux有时会遇到需要kill同一个程序的进程,然而这个程序有多个进程,一一列举很是繁琐,使用按名字检索,统一kill Perl脚本 使用方法 kill_all.pl ...
- php实现 删除字符串中出现次数最少的字符
php实现 删除字符串中出现次数最少的字符 一.总结 一句话总结:数组排序是改变数组的,而其它函数一般不改变原数据,比如str_replace(); 1.单案例测试通过而多案例测试不通过怎么办? 检 ...
- 怎样收缩超大的SharePoint_Config数据库
前言 在已经执行了2年多的SharePointserver上,发现SharePoint_Config的数据库文件越来越大,已经达到90几个GB,收缩能够减小20几个GB,可是一周以后又会恢复到90几个 ...
- Erlang 进制转换
http://www.cnblogs.com/me-sa/archive/2012/03/20/erlang0047.html bnot unary bitwise not integer div i ...
- [NPM] Create a bash script to replace a complex npm script
In this lesson we will look at pulling out complex npm scripts into their own external bash scripts. ...
- [SVG] Add an SVG as an Embedded Background Image
Learn how to set an elements background image to embedded SVG. This method has an added benefit of n ...
- Vagi单点登录1.0
Vagi是一款基于CAS(CAS v4)的Web应用单点登录系统.(cas web https://github.com/Jasig/cas) 对数据库用户存储支持 加入登录验证码 新浪微博和QQ互联 ...
- 在视图上创建ListCtrl的做法
作者:朱金灿 来源:http://blog.csdn.net/clever101 今天介绍下如何在一个视图上动态创建一个ListCtrl. 1.新建一个MFC的单文档工程,这里暂定名字为ListDem ...
- 【序列操作III】线段树
题目描述 给出序列 a1,a2,…an(0≤ai≤109),有关序列的四种操作: 1. al,al+1,…,ar(1≤l≤r≤n)加上 x(-103≤x≤103) 2. al,al+1,…,ar(1≤ ...