纪中20日c组T2 2122. 2016-12-31普及组模拟幸运票

Posted send-off-a-friend

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了纪中20日c组T2 2122. 2016-12-31普及组模拟幸运票相关的知识,希望对你有一定的参考价值。

2122. 幸运票

(File IO): input:tickets.in output:tickets.out

时间限制: 1000 ms  空间限制: 262144 KB  具体限制  

Goto ProblemSet

题目描述

给你一个数N(1<=N<=50),每张票有2N位,同时给你这2N位上的和S,如果这张票的前N位的和等于后N位的和,那我们称这张票是吉祥的,每一位可以取0-9。

你的任务是计算吉祥票的总数。

输入

输入N和S,S是所以位上的和,假设S<=1000

输出

输出吉祥票的总数

样例输入

2 2

样例输出

4

数据范围限制

见题目描述

Solution

此题很不友好……emmm……

Algorithm1

死命dfs

Code1

技术图片
 1 #pragma GCC optimize(2)
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstdio>
 5 #include<cstring>
 6 #include<cmath>
 7 #include<map>
 8 #include<set>
 9 #include<vector>
10 #include<queue>
11 #define IL inline
12 using namespace std;
13 
14 unsigned long long n,s,ans,sum;
15 IL void dfs(unsigned long long depth,unsigned long long now,unsigned long long sum)
16 
17     if(sum*2>s) return;
18     if(depth==n)
19         if(sum==s/2)
20             ans++;
21         return;
22     
23     for(int i=0;i<10;i++)
24     
25         dfs(depth+1,now*10+i,sum+i);
26     
27 
28 int main()
29 
30 //    freopen("tickets.in","r",stdin);
31 //    freopen("tickets.out","w",stdout);
32     cin>>n>>s;
33     dfs(0,0,0);
34     cout<<ans*ans;
35      return 0;
36 
Code1

Algorithm2

打了一番表,发现真相……

一个斜着的杨辉三角形*2???

由于某些原因(换了电脑且插不了U盘)

没法详细的讲规律

这是ans,不是ans的平方!

0 0 0 0 0 0 0 0……
1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 0 0 0 0 ……
1 1 3 3 6 6 10 10 15 15 21 21 28 28 36 36 45 45 55 55 63 63 ……0 0 0 0 ……
1 1 4 4 10   10   20   20 ……

可以用s/2向下取整+1先把重复的删除(calc(n,s/2+1))

然后这个矩阵就有有个规律了:

如果s/2+1小于11的话,memory[i][j]=memory[x-1][y]+memory[x][y-1]

否则memory[i][j]=memory[x-1][y]+memory[x][y-1]-1

 

以上是关于纪中20日c组T2 2122. 2016-12-31普及组模拟幸运票的主要内容,如果未能解决你的问题,请参考以下文章

纪中10日T1 2300. noip普及组第一题模板题

纪中某日c组模拟赛 2314. 最短路

纪中5日T3 1566. 幸运锁(lucky.pas/c/cpp)

模拟赛纪中提高A组 19.8.9 测试

纪中集训2019.08.13省选组模拟3

(第十三周)工作总结