【u128】又一个数字游戏
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;
【完整代码】
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <iostream>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%lld",&x)
#define ref(x) scanf("%lf",&x)
typedef pair<int,int> pii;
typedef pair<LL,LL> pll;
const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 500+10;
const LL MOD = 100003;//少加了个0........QAQ
LL c[N][N],f[N][N],sum[N];
void pre_zuhe()
{
c[0][0] = 1;
rep1(i,1,500)
c[i][0] = c[i][i] = 1;
rep1(i,2,500)
rep1(j,1,i-1)
c[i][j] = (c[i-1][j-1]+c[i-1][j])%MOD;
//cout << c[4][3]<<endl;
}
void do_dp()
{
f[2][1] = sum[2] = 1;
rep1(i,3,500)//最大数字为i
{
f[i][1] = f[i][2] = 1;sum[i] = 2;
rep1(j,3,i-1)//位置在j
{
rep1(k,1,j-1)//往前一个,最大数字为j,然后位置在k
if (i-j-1>=j-k-1)
f[i][j]=(f[i][j]+f[j][k]*c[i-j-1][j-k-1])%MOD;
sum[i] = (sum[i]+f[i][j])%MOD;
}
}
}
void o()
{
int T;
rei(T);
while (T--)
{
int n;
rei(n);
cout << sum[n] << endl;
}
}
int main()
{
// freopen("F:\\rush.txt","r",stdin);
pre_zuhe();//ok
do_dp();//ok
o();//ok
//printf("\n%.2lf sec \n", (double)clock() / CLOCKS_PER_SEC);
return 0;
}
【u128】又一个数字游戏的更多相关文章
- 小易邀请你玩一个数字游戏,小易给你一系列的整数。你们俩使用这些整数玩游戏。每次小易会任意说一个数字出来,然后你需要从这一系列数字中选取一部分出来让它们的和等于小易所说的数字。 例如: 如果{2,1,2,7}是你有的一系列数,小易说的数字是11.你可以得到方案2+2+7 = 11.如果顽皮的小易想坑你,他说的数字是6,那么你没有办法拼凑出和为6 现在小易给你n个数,让你找出无法从n个数中选取部分求和
小易邀请你玩一个数字游戏,小易给你一系列的整数.你们俩使用这些整数玩游戏.每次小易会任意说一个数字出来,然后你需要从这一系列数字中选取一部分出来让它们的和等于小易所说的数字. 例如: 如果{2,1,2 ...
- NOIP2003pj数字游戏[环形DP]
题目描述 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分 ...
- Codevs 1229 数字游戏
1229 数字游戏 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description Lele 最近上课的时候都很无聊,所以他发明了 ...
- codevs 1229 数字游戏(可重集的全排列)
传送门 Description Lele 最近上课的时候都很无聊,所以他发明了一个数字游戏来打发时间. 这个游戏是这样的,首先,他拿出几张纸片,分别写上0到9之间的任意数字(可重复写某个数字),然后 ...
- 【wikioi】1229 数字游戏(dfs+水题)
http://wikioi.com/problem/1229/ 赤裸裸的水题啊. 一开始我认为不用用完全部的牌,以为爆搜会tle.. 可是我想多了. 将所有状态全部求出,排序后暴力判断即可. (水题有 ...
- BZOJ3404: [Usaco2009 Open]Cow Digit Game又见数字游戏
3404: [Usaco2009 Open]Cow Digit Game又见数字游戏 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 47 Solved ...
- Vijos_1218_数字游戏_(划分型动态规划+环状动态规划)
描述 https://vijos.org/p/1218 给出n个数围成一个环,将其划分成k个部分,每个部分求和再对10取模,最后将每个部分的值相乘,求其最大值与最小值. 描述 丁丁最近沉迷于一个数字游 ...
- 3404: [Usaco2009 Open]Cow Digit Game又见数字游戏
3404: [Usaco2009 Open]Cow Digit Game又见数字游戏 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 72 Solved ...
- [Noip2003 PJ] 数字游戏
Description & Range 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有 ...
随机推荐
- pl/sql 语句块循环语句
---基本循环declarev1 number(2) :=1;begin loop dbms_output.put_line(v1); v1:=v1+1; exit when v1>10; -- ...
- Python 正则表达式语法实例
- Leetcode2.Add Two Numbers两数相加
给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -& ...
- 【风马一族_php】数组函数
原文来自:http://www.cnblogs.com/sows/p/6045699.html (博客园的)风马一族 侵犯版本,后果自负 2016-11-09 15:56:26 数组 函数 php- ...
- Liferay如何连接本地的数据库
Liferay自带的数据库非常迷你,一般就是玩玩的. 在真实的开发过程中,我们往往需要把它与我们本地的数据库相连. 有3中方法,我在这里就只介绍我自己最喜欢的方法啦.连的是mysql 1.在Lifer ...
- Ajax--Ajax基于原生javascript:创建Ajax对象、链接服务器、发送请求、接受响应结果
Ajax概述 异步:指某段程序执行时不会阻塞其它程序执行,其表现形式为程序的执行顺序不依赖程序本身的书写顺序,相反则为同步. 同步请求: 请求是由浏览器发送 页面会刷新 异步请求: 请求是由浏览器的一 ...
- gitlab 添加本地项目
1.安装git https://git-scm.com/downloads 2.新建工程 3.创建密钥 a.桌面右键 b.cd ~/.ssh/ 如果提示 “ No such file or di ...
- Nginx 外的另一选择,轻量级开源 Web 服务器 Tengine 发布新版本
新版发布 近日,轻量级开源 Web 服务器 Tengine 发布了2.3.0版本,新增如下特性: ngx_http_proxy_connect_module,该模块让 Tengine 可以用于正向代理 ...
- Idea创建maven项目 标签: idea 2016-12-28 21:51 605人阅读 评论(27) 收藏
很久之前就听说了idea,界面也的确比eclipse好看,不过一直没有机会使用,这两天试用了一下,代码提示方面的确很好用,不过使用习惯跟eclipse还是有一些差距的,下面介绍一下如何用idea创建一 ...
- 在浏览器中打开php文件时,是Linux中的哪个用户执行的?
https://segmentfault.com/q/1010000002541340 如题,这样我就可以针对这个用户设置权限了.而且这个用户是怎么关联上的,怎么查看? 解答一: .是执行 PHP 指 ...