Time Limit: 1 second

Memory Limit: 128 MB

【问题描述】

小明拿出了一个素数集合,{2, 3, 5, 7, 11, 13, …, 127, …},他发现,从小到大排序后,127是第31个数,而31也在素数集内,31是第

11个数,11是第5个数,5是第3个数,3是第2个数,2是第1个数。

而127,31,11,5,3,2都为素数。

这时,小明又发明了一个游戏,给出一个n,取出一个{2, 3, 4, …, n}的一个子集,子集中必须包含n。将取出子集中的数从小到大排序后

,他先取出n,n是第k1大的数,再取出k1,k1是第k2大的数,再取出k2……这样不断下去,最后能取出最小的数。对于给定的n,为{2, 3,

4, …, n}的子集中有多少个满足要求。

【输入格式】

输入文件another.in的第一行包含一个正整数T,表示了数据组数。

接下来T行,每行一个不小于2的正整数n,如题目所述。

【输出格式】

输出文件another.out包括T行,对于每个n输出相应答案,由于答案可能很大,你需要输出答案mod 100003后的结果,请注意可能要使用

int64或者long long。

【数据规模】

对于20%的数据,有T≤5, N≤12; 对于60%的数据,有T≤50,N≤100; 对于100%的数据,有T≤500,N≤500。

Sample Input1

2

5

6

Sample Output1

5

8

【样例说明】

对于n=5,有以下5个答案:

{5}, {2, 5}, {2, 3, 5}, {2, 3, 4, 5}, {3, 4, 5}

{2, 4, 5}不行是因为5是第3大的数,3不在集合中。

{3, 5}同样也不行,因为5是第2大的数,2不在集合中。

对于n = 6

{3, 4, 5, 6}不行是因为6是第4大的数,4是第2大的数,2不在集合中。

【题目链接】:http://noi.qz5z.com/viewtask.asp?id=u128

【题意】

【题解】



设f[i][j]表示最大的数为i,然后最大的数的位置在j的方案数;

则f[i][j] = ∑(f[j][k]*C(i-j-1,j-k-1);

这里本来i是第j大的(因为在第j个位置),然后按照游戏的规则

前一个就是数字j了,

这正好和状态f[j][k]对应;

即最大的数字为j,然后j的位置在k;

这里k和j之间有k-j-1个空位;

你可以在这k-j-1个空位里面放j+1..i-1这些数字;组合数嘛;

预处理一下组合数就好;

这里抓住了游戏的前一个和后一个数字的矛盾,用来当做状态.

很优秀。

最后累加f[n][1..n-1]就好;

边界f[2][1]=1;



【完整代码】

  1. #include <cstdio>
  2. #include <algorithm>
  3. #include <cmath>
  4. #include <iostream>
  5. using namespace std;
  6. #define lson l,m,rt<<1
  7. #define rson m+1,r,rt<<1|1
  8. #define LL long long
  9. #define rep1(i,a,b) for (int i = a;i <= b;i++)
  10. #define rep2(i,a,b) for (int i = a;i >= b;i--)
  11. #define mp make_pair
  12. #define pb push_back
  13. #define fi first
  14. #define se second
  15. #define rei(x) scanf("%d",&x)
  16. #define rel(x) scanf("%lld",&x)
  17. #define ref(x) scanf("%lf",&x)
  18. typedef pair<int,int> pii;
  19. typedef pair<LL,LL> pll;
  20. const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
  21. const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
  22. const double pi = acos(-1.0);
  23. const int N = 500+10;
  24. const LL MOD = 100003;//少加了个0........QAQ
  25. LL c[N][N],f[N][N],sum[N];
  26. void pre_zuhe()
  27. {
  28. c[0][0] = 1;
  29. rep1(i,1,500)
  30. c[i][0] = c[i][i] = 1;
  31. rep1(i,2,500)
  32. rep1(j,1,i-1)
  33. c[i][j] = (c[i-1][j-1]+c[i-1][j])%MOD;
  34. //cout << c[4][3]<<endl;
  35. }
  36. void do_dp()
  37. {
  38. f[2][1] = sum[2] = 1;
  39. rep1(i,3,500)//最大数字为i
  40. {
  41. f[i][1] = f[i][2] = 1;sum[i] = 2;
  42. rep1(j,3,i-1)//位置在j
  43. {
  44. rep1(k,1,j-1)//往前一个,最大数字为j,然后位置在k
  45. if (i-j-1>=j-k-1)
  46. f[i][j]=(f[i][j]+f[j][k]*c[i-j-1][j-k-1])%MOD;
  47. sum[i] = (sum[i]+f[i][j])%MOD;
  48. }
  49. }
  50. }
  51. void o()
  52. {
  53. int T;
  54. rei(T);
  55. while (T--)
  56. {
  57. int n;
  58. rei(n);
  59. cout << sum[n] << endl;
  60. }
  61. }
  62. int main()
  63. {
  64. // freopen("F:\\rush.txt","r",stdin);
  65. pre_zuhe();//ok
  66. do_dp();//ok
  67. o();//ok
  68. //printf("\n%.2lf sec \n", (double)clock() / CLOCKS_PER_SEC);
  69. return 0;
  70. }

【u128】又一个数字游戏的更多相关文章

  1. 小易邀请你玩一个数字游戏,小易给你一系列的整数。你们俩使用这些整数玩游戏。每次小易会任意说一个数字出来,然后你需要从这一系列数字中选取一部分出来让它们的和等于小易所说的数字。 例如: 如果{2,1,2,7}是你有的一系列数,小易说的数字是11.你可以得到方案2+2+7 = 11.如果顽皮的小易想坑你,他说的数字是6,那么你没有办法拼凑出和为6 现在小易给你n个数,让你找出无法从n个数中选取部分求和

    小易邀请你玩一个数字游戏,小易给你一系列的整数.你们俩使用这些整数玩游戏.每次小易会任意说一个数字出来,然后你需要从这一系列数字中选取一部分出来让它们的和等于小易所说的数字. 例如: 如果{2,1,2 ...

  2. NOIP2003pj数字游戏[环形DP]

    题目描述 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分 ...

  3. Codevs 1229 数字游戏

    1229 数字游戏  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 白银 Silver     题目描述 Description Lele 最近上课的时候都很无聊,所以他发明了 ...

  4. codevs 1229 数字游戏(可重集的全排列)

    传送门 Description Lele 最近上课的时候都很无聊,所以他发明了一个数字游戏来打发时间.  这个游戏是这样的,首先,他拿出几张纸片,分别写上0到9之间的任意数字(可重复写某个数字),然后 ...

  5. 【wikioi】1229 数字游戏(dfs+水题)

    http://wikioi.com/problem/1229/ 赤裸裸的水题啊. 一开始我认为不用用完全部的牌,以为爆搜会tle.. 可是我想多了. 将所有状态全部求出,排序后暴力判断即可. (水题有 ...

  6. BZOJ3404: [Usaco2009 Open]Cow Digit Game又见数字游戏

    3404: [Usaco2009 Open]Cow Digit Game又见数字游戏 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 47  Solved ...

  7. Vijos_1218_数字游戏_(划分型动态规划+环状动态规划)

    描述 https://vijos.org/p/1218 给出n个数围成一个环,将其划分成k个部分,每个部分求和再对10取模,最后将每个部分的值相乘,求其最大值与最小值. 描述 丁丁最近沉迷于一个数字游 ...

  8. 3404: [Usaco2009 Open]Cow Digit Game又见数字游戏

    3404: [Usaco2009 Open]Cow Digit Game又见数字游戏 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 72  Solved ...

  9. [Noip2003 PJ] 数字游戏

    Description & Range 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有 ...

随机推荐

  1. vue中is的作用和用法

    回顾vue官方文档的过程中发现了is这个特性,虽然以我的写代码风格实在用不上,不过还是记录一下这个知识点 is的作用 <ul> <li></li> <li&g ...

  2. python fullmatch函数

  3. Vijos1775 CodeVS1174 NOIP2009 靶形数独

    靶形数独 描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z博士请教, Z 博士拿出了他最近发 ...

  4. 列表list和元祖tuple

    list和tuple list列表: Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示: ...

  5. bzoj2073 PRZ

    Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍在桥上的人都不能超过一定的限制. 所以这只队伍 ...

  6. 封装好的MySQL.class.php类

    封装好的MySQL.class.php类 作用:数据库操作类 <?php header('content-type:text/html;charset=utf-8'); class MySQLD ...

  7. 预警| Confluence 高危漏洞被大规模利用,阿里云WAF接入即可防护,支持免费应急服务

    2019年4月4日,阿里云安全应急响应中心监测到Confluence 官方发布安全更新指出,Widget Connector 存在服务端模板注入漏洞,攻击者能利用此漏洞实现目录穿越遍历甚至远程命令执行 ...

  8. dva框架简单描述使用

    首先传统的create-router-app脚手架生成的脚手架我们写仓库的时候用reducers进行调用还有thunk进行异步操作的时候,需要多层函数进行调用,这样会让我们代码进行维护的时候变得麻烦, ...

  9. SDUT-2121_数据结构实验之链表六:有序链表的建立

    数据结构实验之链表六:有序链表的建立 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 输入N个无序的整数,建立一个有序链 ...

  10. laravel setxxAttribute和getxxAttribute的使用

    setxxAttribute 在设置(sql: insert update) 的时候 会将$obj->xx = 'value'的时候, 操作数据库之前 自动转化一下 getxxAttribute ...