【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 解题报告的更多相关文章

  1. 洛谷 P4363 [九省联考2018]一双木棋chess 解题报告

    P4363 [九省联考2018]一双木棋chess 题目描述 菲菲和牛牛在一块\(n\)行\(m\)列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手. 棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落 ...

  2. 洛谷 P4555 [国家集训队]最长双回文串 解题报告

    P4555 [国家集训队]最长双回文串 题目描述 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为abc,逆序为cba,不相同). 输入长度为\(n\)的串 ...

  3. Tarjan算法求解桥和边双连通分量(附POJ 3352 Road Construction解题报告)

     http://blog.csdn.net/geniusluzh/article/details/6619575 在说Tarjan算法解决桥和边双连通分量问题之前我们先来回顾一下Tarjan算法是如何 ...

  4. BZOJ 1051 最受欢迎的牛 解题报告

    题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4438  Solved: 2353[S ...

  5. ACM: Just a Hook 解题报告 -线段树

    E - Just a Hook Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   D ...

  6. Facebook Hacker Cup 2014 Qualification Round 竞赛试题 Square Detector 解题报告

    Facebook Hacker Cup 2014 Qualification Round比赛Square Detector题的解题报告.单击这里打开题目链接(国内访问需要那个,你懂的). 原题如下: ...

  7. 【NOIP2015】提高组D1 解题报告

    P1978神奇的幻方 Accepted 描述 幻方是一种很神奇的 N ∗ N 矩阵:它由数字 1,2,3, … … , N ∗ N 构成,且每行.每列及两条对角线上的数字之和都相同. 当 N 为奇数时 ...

  8. NOIP2015 提高组(senior) 解题报告

    过了这么久才来发解题报告,蒟蒻实在惭愧 /w\ Day1 T1 [思路] 模拟 [代码] #include<iostream> #include<cstring> #inclu ...

  9. 杭州电子科技大学Online Judge 之 “确定比赛名次(ID1285)”解题报告

    杭州电子科技大学Online Judge 之 "确定比赛名次(ID1285)"解题报告 巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozh ...

随机推荐

  1. 关于Python的装饰器(2)

    Python中被装饰器修饰的函数,解析后会生成一个参数是被修饰函数的装饰器函数对象,可以调用,可以接受传参(如果被修饰的函数定义了参数),实际调用的时候,尽管代码里值写了被修饰的函数,被调用的却是最终 ...

  2. 【Jmeter测试】如何使用BeanShell断言判断请求返回的Json相应结果

      脚本结构​上图中,queryMaterialApiDTOListByPkIds是返回Json格式响应结果的请求,然后添加BeanShell断言详细判断Json结果中的值是否正确. Json格式的相 ...

  3. TPO-17 C2 Reschedule part-time job in campus dining hall

    TPO-17 C2 Reschedule part-time job in campus dining hall 第 1 段 1.Listen to a conversation between a ...

  4. 【第二章】MySQL数据库基于Centos7.3-部署

    一.MySQL数据库的官方网址: https://www.mysql.com/ https://www.oracle.com/ http://dev.mysql.com/doc/refman/5.7/ ...

  5. DeepLearning - Regularization

    I have finished the first course in the DeepLearnin.ai series. The assignment is relatively easy, bu ...

  6. 17 Tips For Writing An Excellent Email Subject Line

    Out of the billions of emails that are sent every day, how can you make sure that yours stands out? ...

  7. how to update product listing price sale price and sale date using mobile App

    Greetings from Amazon Seller Support, Thank you for writing back to us. I have reviewed our previous ...

  8. ES6的新特性(6)——正则的扩展

    正则的扩展 RegExp 构造函数 在 ES5 中,RegExp构造函数的参数有两种情况. 第一种情况是,参数是字符串,这时第二个参数表示正则表达式的修饰符(flag). var regex = ne ...

  9. ES6的新特性(3)——变量的解构赋值

    变量的解构赋值 数组的解构赋值 基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). let a = 1; let b = 2; le ...

  10. 面对30页左右的运放数据手册datasheet,你需要知道如何看懂

    1.输入失调电压(Input Offset Voltage) VOS    若将运放的两个输入端接地,理想运放输出为零,但实际运放输出不为零.此时,用输出电压除以增益得到的等效输入电压称为输入失调电压 ...