Lucky Tickets URAL - 1036 dp+大数

  用b[i][j]表示递推到第i位时数字和为j的方案数,那么总方案数就是b[n][s/2]的平方

  

 1 n, s = input().split(‘ ‘)
 2
 3 n = int(n)
 4 s = int(s)
 5
 6 if s % 2 == 1:
 7     print(0)
 8 else:
 9     s = int(s // 2)
10     b = [[]]
11     a = []
12     for i in range(0, 10):
13         a.append(1)
14     for i in range(10, s + 1):
15         a.append(0)
16     b.append(a)
17     for i in range(2, n + 1):
18         a = [0]  # 添加一个数用于占位
19         for j in range(0, s + 1):
20             a.append(0)
21             for m in range(0, 10):
22                 if m <= j:
23                     a[j] += b[i - 1][j - m]
24         b.append(a)
25     print(b[n][s] ** 2)

原文地址:https://www.cnblogs.com/tcctw/p/8642243.html

时间: 2024-10-08 19:55:26

Lucky Tickets URAL - 1036 dp+大数的相关文章

URAL 1036(dp+高精度)

Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Practice URAL 1036 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 digi

Gym 100418J Lucky tickets(数位dp)

题意:给定一个n,求区间[1, n]之间的所有的a的个数,a满足: a能整除  把a表示自身二进制以后1的个数 思路:题意很绕.... 数位dp,对于所有可能的1的个数我们都dfs一次 对于某一个可能的1的个数p来说,状态dp(len, i, j, k)里的每一位分别表示当前位,当前确定位的值模除p,已经有了多少个1,是否已经小于给定的n, 注意的是这题范围很大,要用unsigned long long 来定义n #include<cstdio> #include<cstring>

Codeforces1096G Lucky Tickets(NTT优化dp)

设\(f[i][j]\)表示填了\(i\)个数,数位和为\(j\)的方案数 于是方程为: \[f[i][j]=\sum_{k=1}^9 f[i-1][j-k]*[CanUse[k]==1]\] 其中\(CanUse[i]\)表示是否可用\(i\)这个数字 最终答案为: \[\sum_{i=1}^{9*(n/2)}f[n/2][j]\] 直接转移肯定\(T\)飞,需要一些优化.于是我们观察到这个式子是卷积形式的式子,直接上\(NTT\)板子+快速幂即可 \(P.S.\)一些优化 可以把每个\(po

DP+高精度 URAL 1036 Lucky Tickets

题目传送门 1 /* 2 题意:转换就是求n位数字,总和为s/2的方案数 3 DP+高精度:状态转移方程:dp[cur^1][k+j] = dp[cur^1][k+j] + dp[cur][k]; 4 高精度直接拿JayYe的:) 5 异或运算的规则: 6 0⊕0=0,0⊕1=1 7 1⊕0=1,1⊕1=0 8 口诀:相同取0,相异取1 9 */ 10 #include <cstdio> 11 #include <cstring> 12 #include <string>

Ural 1036 Lucky Tickets

Lucky Tickets Time Limit: 2000ms Memory Limit: 16384KB This problem will be judged on Ural. Original ID: 103664-bit integer IO format: %lld      Java class name: (Any) You are given a number 1 ≤ N ≤ 50. Every ticket has its 2N-digit number. We call a

寒假集训.Lucky Tickets. Easy!

Lucky Tickets. Easy! Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Description Background The public transport administration of Ekaterinburg is anxious about the fact that passengers don't like to pay for

poj 2193 Lenny&#39;s Lucky Lotto Lists 简单dp

//poj 2193 //sep9 #include <iostream> using namespace std; typedef __int64 INT; INT dp[16][2048]; int n,m; int main() { int cases,t=0; scanf("%d",&cases); while(cases--){ scanf("%d%d",&n,&m); memset(dp,0,sizeof(dp));

HDU Tickets(简单的dp递推)

Tickets Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 972    Accepted Submission(s): 495 Problem Description Jesus, what a great movie! Thousands of people are rushing to the cinema. However,

POJ 2355 Railway tickets (线性dp)

OJ题目 :click here~ 题目分析:X为距离 , 当0<X<=L1, 票价为C1. L1<X<=L2 ,票价为C2.L2<X<=L3,票价为C3.给每段车站时间的距离,求某两个车站之间的总票价的最小值. 设dp[ i ] 为到车站 i 的最少票价 . 则转移方程为dp[ i ] = min(dp[ j ] + 从j 到 i 的票价),j 为所有可以直接到 i 的车站. 要注意第一个数字 大于 第二个数字的情况.的确,题目没有说,从a 到 b.只说了a,b之间.