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] 步, 从 ( ...
随机推荐
- Windows10终端优化方案:Ubuntu子系统+cmder+oh-my-zsh
原问地址:https://zhuanlan.zhihu.com/p/34152045 最近从MacBook换到了种草已久的Surface Book 2,而我的工作环境也自然要从macOS换到Windo ...
- Sphinx+MySQL5.1x+SphinxSE+mmseg中文分词
什么是Sphinx Sphinx 是一个全文检索引擎,一般而言,Sphinx是一个独立的搜索引擎,意图为其它应用提供快速.低空间占用.高结果相关度的全文搜索功能.Sphinx能够很easy的与SQL数 ...
- IAdjustCountOption--动态设置recycleView的itemCount(不须要改动数据源)
概述 RecycleViewUtil是新增的一个主要针对RecycleView的一个工具类.该工具类中提供了部分RecycleView可能会使用到的方法,当中也包含了一些用来增强HeaderRecyc ...
- STS 3.6.4 SpringMVC 4.1.6 Hibernate 4.3.8 MySQL
开发环境: Java 1.8 Spring Tool Suite 3.6.4 Spring faramework 4.1.6 Hibernate 4.3.8 Maven 2.9 数据库是MySQL 5 ...
- Xcode6.3 怎样使用Leaks查看内存泄露
Xcode -> Open Developer Tool -> Instruments : Leaks: 选择要检測的程序: 界面详情:
- keepalived.conf 配置文件小结
vrrp_script vs_mysql_82 { script "/etc/keepalived/checkMySQL.py -h 192.168.11.82 -P 3306&qu ...
- 关于IT增值服务"拜师学艺"价格调整的通知
经过几天的探索,在与若干潜在付费客户交流的基础上,决定对IT增值服务"拜师学艺"价格进行调整. 当前价格:年费1000元,月付100元-1年付10个月. 2015年1月1日起,年费 ...
- 【u210】kfc
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 最近Kfc新开了个KFC,该KFC提供N种食物,分别用1-N给这些食物编号,食物的价格与其编号有关,满 ...
- C语言编写静态链接库及其使用
本篇讲述使用C语言编写静态链接库,而且使用C和C++的方式来调用等. 一.静态库程序:执行时不独立存在,链接到可执行文件或者动态库中,目标程序的归档. 1.用C编写静态库步骤 a.建立项目(Win32 ...
- 从张量积(tensor product)到多重线性代数(multilinear algebra)
记张量积的数学记号为 ⊗. 1. linear 假设 V,W 为线性空间(vector spaces),f:V→W是线性(linear)的,如果满足: f(v1+v2)=f(v1)+f(v2)f(αv ...