Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u

Description

You are given a number 1 ≤ N ≤ 50. Every ticket has its 2 N-digit number. We call a ticket lucky, if the sum of its first N digits is equal to the sum of its last N digits. You are also given the sum of ALL digits in the number. Your task is to count an amount of lucky numbers, having the specified sum of ALL digits.

Input

Two space-separated numbers: N and S. Here S is the sum of all digits. Assume that 0 ≤ S ≤ 1000.

Output

The amount of lucky tickets.

Sample Input

input output
2 2
4

Hint

The tickets are 0101, 0110, 1001, 1010 in the example above
求前N位与后N位各个位和相等且总和等于S的2N位数的个数。
注意:每个位上的数字是0-9也就是十进制
状态转移方程:dp[i][j]=sum(dp[i-1][j-k],0<=k<=9)。可想而知最后的数一定会很大。所有操作都用高精度来做
#include<stdio.h>
#include<cstring>
#include<iostream>
using namespace std;
int dp[][][];//第100位存的是数据的长度
int n,tot;
void add(int sum[],int num[])
{
int i,j,temp[];
int len1=sum[],len2=num[];
int max=len1>len2 ? len1:len2;
int jin=;
for(i=;i<max;i++){
int m=jin+sum[i]+num[i];
if(m>=) {jin=;m-=;}
else jin=;
temp[i]=m;
}
if(jin) temp[i++]=jin;
for(j=;j<i;j++)
sum[j]=temp[j];
sum[]=i;
}
void muti_dan(int num[],int data[],int n,int h)
{
int temp[],i,j;
memset(temp,,sizeof(temp));
int len=num[];
int jin=;
for(i=;i<len;i++){
int m=num[i]*n+jin;
jin=m/;
if(jin)m-=jin*;
temp[i]=m;
}
if(jin) temp[i++]=jin;
data[-h]=i;
for(j=;j<i;j++){
data[j]=temp[j];
}
}
void multi(int num[],int num1[])
{
int temp[],sum[],i,j;
memset(sum,,sizeof(sum));
int len1=num[],len2=num1[];
for(j=;j<len2;j++){
memset(temp,,sizeof(temp));
muti_dan(num,&temp[j],num1[j],j);
temp[]+=j;
add(sum,temp);
}
for(i=;i<sum[];i++){
num[i]=sum[i];
}
num[]=sum[];
}
void display(int num[])
{
int len=num[];
for(int i=len-;i>;i--)
cout<<num[i];
cout<<num[]<<endl;
}
void solve()
{
int i,j,k;
if(tot%) {printf("0\n");return;}
int sum=tot/;
memset(dp,,sizeof(dp));
for(i=;i<;i++) {
dp[][i][]=;
dp[][i][]=;
} for(i=;i<n-;i++){
for(j=;j<=sum;j++){
for(k=;k<=&&j+k<=sum;k++){
add(dp[i+][j+k],dp[i][j]);
}
}
} multi(dp[n-][sum],dp[n-][sum]);
display(dp[n-][sum]);
}
int main(void)
{
while(cin>>n>>tot){
solve();
}
return ;
}

URAL 1036(dp+高精度)的更多相关文章

  1. DP+高精度 URAL 1036 Lucky Tickets

    题目传送门 /* 题意:转换就是求n位数字,总和为s/2的方案数 DP+高精度:状态转移方程:dp[cur^1][k+j] = dp[cur^1][k+j] + dp[cur][k]; 高精度直接拿J ...

  2. 1166 矩阵取数游戏[区间dp+高精度]

    1166 矩阵取数游戏 2007年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description [ ...

  3. bzoj 1089 [SCOI2003]严格n元树(DP+高精度)

    1089: [SCOI2003]严格n元树 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1250  Solved: 621[Submit][Statu ...

  4. CF23 E. Tree 树形dp+高精度

    题目链接 CF23 E. Tree 题解 CF竟让卡常QAQ dp+高精度 dp[x][j]表示以x为根的子树,x所属的联通块大小为j,的最大乘积(不带j这块 最后f[x]维护以x为根的子树的最大答案 ...

  5. 【bzoj2764】[JLOI2011]基因补全 dp+高精度

    题目描述 在生物课中我们学过,碱基组成了DNA(脱氧核糖核酸),他们分别可以用大写字母A,C,T,G表示,其中A总与T配对,C总与G配对.两个碱基序列能相互匹配,当且仅当它们等长,并且任意相同位置的碱 ...

  6. poj 1205 :Water Treatment Plants (DP+高精度)

    题意:有n个城市,它们由一个污水处理系统连接着,每个城市可以选择 1.将左边城市过来的污水和右边城市过来的污水连同本身的污水排到河里  >V< 2.将左边来的污水连同自己的污水排到右边   ...

  7. URAL 1012 K-based Numbers. Version 2(DP+高精度)

    题目链接 题意 :与1009一样,不过这个题的数据范围变大. 思路:因为数据范围变大,所以要用大数模拟,用java也行,大数模拟也没什么不过变成二维再做就行了呗.当然也可以先把所有的都进行打表,不过要 ...

  8. Ural 1036 Lucky Tickets

    Lucky Tickets Time Limit: 2000ms Memory Limit: 16384KB This problem will be judged on Ural. Original ...

  9. POJ 1625 Censored!(AC自动机+DP+高精度)

    Censored! Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 6956   Accepted: 1887 Descrip ...

随机推荐

  1. 对web应用中单一入口模式的理解及php实现

    在我们web应用的开发中,经常会听见或看见单一入口模式,在我开始学习tp框架的时候也不理解为什么要运用一个单一入口模式,只是会使用,最近自己在搞一个小东西的时候才明白为什么在web开发中要运用单一入口 ...

  2. In-System Debugger for 8051 Devices(ISD 8051单片机在线调试器)

    此文档包含了最新版本的说明及最近的更新特别是对 ISD51 的说明(用户手册没有此说明) Keil Software,Inc and Keil Elektronik GmbH保留所有此文件中涉及的信息 ...

  3. servlet上传图片 服务器路径

    1.在servlet中上传图片,上传的文件夹是imge在webroot下,主要代码如下 private void saveImage(HttpServletRequest request, HttpS ...

  4. Sublime text3使用积累

    1.colorpicker选择颜色的. 快捷键ctrl+shift+C 2.jsFormat格式化js 快捷键ctrl+alt+f [ { "keys": ["ctrl+ ...

  5. Java程序员快速入门Go语言

    这篇文章帮助Java程序员快速入门Go语言. 转载至 开源中国社区. http://www.oschina.net 本文将以一个有代表性的例子为开始,以此让Java程序员对Go语言有个初步认识,随后将 ...

  6. Cppcheck软件使用

    一款开源源码检测工具.简单易用. 官网网址:http://cppcheck.sourceforge.net/ 软件可直接官网下载. [plain] view plaincopy Features Ou ...

  7. NOI2011 Day2

    NOI2011 Day2 道路修建 题目描述:给出一棵树,求每条边的两边的端点数的差乘边权之和. solution: 题目可能描述得不太清楚,如图: 对于虚边,如果边权为10,两边的端点数之差为2,这 ...

  8. Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn

    这个异常我在网上查看了很多资料,一般都说是hibernate的session问题,让重新两个方法,但是我以前用的时候没问题啊,所以一直找问题,终于这个bug让我找到了,就是因为我插入操作的时候用的是别 ...

  9. sql优化-总结

    1.尽量缩小数据范围. 2.能一个sql解决的,坚决不用两条sql.利用case when或decode. select month_id, corppkno, sum(exportSum_new) ...

  10. Android牛博

    Android实现伸缩弹力分布菜单效果 摘要: 本文介绍下在Android中实现伸缩弹力分布菜单效果.关于这种菜单效果在IPhone中比较常见,效果比较酷.那么在Android中实现只是一种简单的模仿 ...