【51Nod1386】双马尾机器人Description 解题报告
【51Nod1386】双马尾机器人Description
给定\(n\)和\(k\),我们要在\(1,2,3,...,n\)中选择若干的数,每一种选择的方案被称为选数方案。
我们定义一种选数方案是合法的,当且仅当\(k\)没有被选,且任意两个选的数互质。
我们定义一种选数方案是极大的,当且仅当它是合法的,且不能再从剩下的数中选择任意一个,或者选的是\(k\)。
求极大的选数方案的最小的选的个数。
Input
第一行输入一个\(T\),表示数据组数。
接下来\(T\)行,每行输入整数\(n\)和\(k\),表示球的个数和不能选的编号。
Output
对于每组\(case\),输出一行:"Case #X: Y", \(X\)表示数据编号,\(Y\)表示最少拿走的球的数量。
HINT
\(1≤T≤50\)
\(1≤n≤1000\),\(1≤k≤n\)且\(k\)不是质数
这个思维方式还是要积累一下的。
注意到\(>\sqrt N\)的质数在一个数中不可能同时出现两个,所以每一个大于的质数都可以直接作为贡献(注意\(k\)不是质数)
然后我们发现\(<\sqrt N\)的质数只有\(11\)个,我们可以状压这个集合
令\(dp_{i,j}\)代表前\(i\)个数选出了质因子集合\(j\)的最小选择数量
有转移\(dp_{i,j|sta_i}=\min(dp_{i-1,j}+1-[v_i<\sqrt N],dp_{i,j|sta_i})(if \ j\&sta_i==0)\)
其中\(sta_i\)代表\(i\)这个数的质因数集合,\(v_i\)表示这个数的最大质因数(毕竟大于\(\sqrt N\)的数在外面算过了)
最后的结果是\(dp_{n,all}\),因为我们一定是可以选出这个全集的,然后题目要求我们选这个全集。
Code:
#include <cstdio>
#include <cstring>
const int N=1000;
const int t[12]={0,2,3,5,7,11,13,17,19,23,29,31};
int pri[N+10],ispri[N+10],v[N+10],cnt;
int n,k,T,dp[2][1<<11],sta[N+10],f[N+10];
int min(int x,int y){return x<y?x:y;}
void init()
{
for(int i=2;i<=N;i++)
{
for(int j=1;j<=11;j++)
if(i%t[j]==0)
sta[i]|=1<<j-1;
f[i]=f[i-1];
if(!ispri[i])
{
v[i]=i;
f[i]+=v[i]>3
pri[++cnt]=i;
}
for(int j=1;j<=cnt&&i*pri[j]<=N;j++)
{
ispri[i*pri[j]]=1;
v[i*pri[j]]=v[i];
if(i%pri[j]==0) break;
}
}
}
int main()
{
scanf("%d",&T);
init();
for(int n,d,k=1;k<=T;k++)
{
scanf("%d%d",&n,&d);
int bit=1;
while(bit<=11&&t[bit]<=n) ++bit;--bit;
memset(dp,0x3f,sizeof(dp));
dp[1][0]=0;
for(int i=2;i<=n;i++)
{
for(int j=0;j<1<<bit;j++) dp[i&1][j]=dp[i-1&1][j];
if(i==d) continue;
for(int j=0;j<1<<bit;j++)
if(!(sta[i]&j))
dp[i&1][j|sta[i]]=min(dp[i-1&1][j]+1-(v[i]>31),dp[i&1][j|sta[i]]);
}
printf("Case #%d: %d\n",k,dp[n&1][(1<<bit)-1]+(d!=1)+f[n]);
}
return 0;
}
2018.12.13
【51Nod1386】双马尾机器人Description 解题报告的更多相关文章
- 洛谷 P4363 [九省联考2018]一双木棋chess 解题报告
P4363 [九省联考2018]一双木棋chess 题目描述 菲菲和牛牛在一块\(n\)行\(m\)列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手. 棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落 ...
- 洛谷 P4555 [国家集训队]最长双回文串 解题报告
P4555 [国家集训队]最长双回文串 题目描述 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为abc,逆序为cba,不相同). 输入长度为\(n\)的串 ...
- Tarjan算法求解桥和边双连通分量(附POJ 3352 Road Construction解题报告)
http://blog.csdn.net/geniusluzh/article/details/6619575 在说Tarjan算法解决桥和边双连通分量问题之前我们先来回顾一下Tarjan算法是如何 ...
- BZOJ 1051 最受欢迎的牛 解题报告
题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4438 Solved: 2353[S ...
- ACM: Just a Hook 解题报告 -线段树
E - Just a Hook Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u D ...
- Facebook Hacker Cup 2014 Qualification Round 竞赛试题 Square Detector 解题报告
Facebook Hacker Cup 2014 Qualification Round比赛Square Detector题的解题报告.单击这里打开题目链接(国内访问需要那个,你懂的). 原题如下: ...
- 【NOIP2015】提高组D1 解题报告
P1978神奇的幻方 Accepted 描述 幻方是一种很神奇的 N ∗ N 矩阵:它由数字 1,2,3, … … , N ∗ N 构成,且每行.每列及两条对角线上的数字之和都相同. 当 N 为奇数时 ...
- NOIP2015 提高组(senior) 解题报告
过了这么久才来发解题报告,蒟蒻实在惭愧 /w\ Day1 T1 [思路] 模拟 [代码] #include<iostream> #include<cstring> #inclu ...
- 杭州电子科技大学Online Judge 之 “确定比赛名次(ID1285)”解题报告
杭州电子科技大学Online Judge 之 "确定比赛名次(ID1285)"解题报告 巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozh ...
随机推荐
- 支付宝、微信、QQ 收款二维码三合一
最近折腾了一下合并收款码,简单记录一下折腾的过程,方法不唯一,只是提供一种思路,如果各位大佬有更加简单粗暴的办法,那就更好了. 原理 首先解析出三个二维码的内容,用 Nginx 判断 User age ...
- NPOI读取Excel到集合对象
之前做过的项目中有个需要读取Excel文件内容的需求,因此使用NPOI实现,写下以下代码,这个只是一个代码段,还有很多地方需要优化,希望能对大家有所帮助 public static IList< ...
- 软考之信息安全工程师(包含2016-2018历年真题详解+官方指定教程+VIP视频教程)
软考-中级信息安全工程师2016-2018历年考试真题以及详细答案,同时含有信息安全工程师官方指定清华版教程.信息安全工程师高清视频教程.持续更新后续年份的资料.请点赞!!请点赞!!!绝对全部货真价实 ...
- python基础-02-while格式化逻辑运算
python其他知识目录 1.循环打印“我是小马过河” while True: print('我是小马过河') #4.用while从一打印到10 #5.请通过循环,1 2 3 4 5 6 8 9 ...
- ie6下,莫名被复制出一段文字解决
在IE6下使用浮动可能会出现文字重复的情况. 在IE6下,浮动层之间有注释文字的话,之前那个浮动层的内容文字就有可能遭遇一个“隐形”的复制,但是代码里查看文字可并没有多出来. 看个例子: HTML & ...
- Thunder团队第七周 - Scrum会议1
Scrum会议1 小组名称:Thunder 项目名称:i阅app Scrum Master:杨梓瑞 工作照片: 参会成员: 王航:http://www.cnblogs.com/wangh013/ 李传 ...
- MYSQL报警:Warning: Using a password on the command line interface can be insecure.
问题描述:执行下面的语句,sql是执行成功了,但是出现了一个报警,报警看上去始终不舒服 mysql -hip -Pport -uuser -ppassword -e "use db;dele ...
- pandas中DataFrame的ix,loc,iloc索引方式的异同
pandas中DataFrame的ix,loc,iloc索引方式的异同 1.loc: 按照标签索引,范围包括start和end 2.iloc: 在位置上进行索引,不包括end 3.ix: 先在inde ...
- 【最小生成树+LCA】Imperial roads
http://codeforces.com/gym/101889 I 先跑一遍最小生成树,把经过的边和答案记录下来 对于每个询问的边,显然如果处于MST中,答案不变 如果不在MST中,假设这条边连上了 ...
- virtual judge 本地部署方案
这是一种将自己的电脑当作服务器来部署一个vj的方法,我也是参考前辈们的做法稍作了改动,如果在服务器上部署的话需要在细节上稍作改动: 一.什么是Virtual Judge? vj的工作原理什么? vj ...