HDU 6125 - Free from square | 2017 Multi-University Training Contest 7

时间:2023-01-31 23:26:31

思路来自这里 - -

/*
HDU 6125 - Free from square [ 分组,状压,DP ] | 2017 Multi-University Training Contest 7
题意:
不超过N的数字中选K个,其乘积不是平方数的倍数
限制 N,K <= 500
分析:
小于根号N的质因子至多只有8个,而大于根号N的质因子任意两个乘积大于N
所以N以内的完全平方数只有两种
1. 没有大于根号N的质因子
2. 有且只有1个大于根号N的质因子
对于小于根号N的质因子,可以直接按集合状压DP(自身为1组)
对于大于根号N的质因子,可以将包含该质因子的 非平方数的倍数的数 都归为1组,然后分组DP
每个数字的状态为其所包含的小于根号N的质因子的集合
具体DP递推式 为
if (a&b == 0) dp[k][a|b] = (dp[k][a|b] + dp[k-1][b]) % MOD;
其中 a, b为小于8的质因子的集合
*/
#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9+7;
const int N = 505;
int p[8] = {2, 3, 5, 7, 11, 13, 17, 19};
int n, t, k;
int dp[N][1<<10];
int st[N], belong[N];
vector<int> v[N];
int solve()
{
for (int i = 1; i <= n; i++)
{
belong[i] = i;
for (int j = 0; j < 8; j++)
if (i % p[j] == 0)
{
if (i% (p[j]*p[j]) == 0)
{
st[i] = -1; break;
}
st[i] |= 1<<j;
belong[i] /= p[j];
}
if (st[i] == -1) continue;
if (belong[i] == 1) v[i].push_back(i);
else v[belong[i]].push_back(i);
}
dp[0][0] = 1;
for (int i = 1; i <= n; i++)
{
if (st[i] == -1 || v[i].size() == 0) continue;
for (int l = k; l >= 1; l--)
for (int j = 0; j < (1<<8); j++)
for (auto & x : v[i])
{
int p = st[x];
if (!(p&j)) dp[l][p|j] = (dp[l][p|j] + dp[l-1][j]) % MOD;
}
}
int ans = 0;
for (int i = 1; i <= k; i++)
for (int j = 0; j < (1<<8); j++)
ans = (ans + dp[i][j]) % MOD;
return ans;
}
int main()
{
scanf("%d", &t);
while (t--)
{
scanf("%d%d", &n, &k);
memset(dp, 0, sizeof(dp));
memset(st, 0, sizeof(st));
for (int i = 1; i <= n; i++) v[i].clear();
printf("%d\n", solve());
}
}

  

HDU 6125 - Free from square | 2017 Multi-University Training Contest 7的更多相关文章

  1. HDU 6162 - Ch’s gift &vert; 2017 ZJUT Multi-University Training 9

    /* HDU 6162 - Ch’s gift [ LCA,线段树 ] | 2017 ZJUT Multi-University Training 9 题意: N节点的树,Q组询问 每次询问s,t两节 ...

  2. HDU 6125 Free from square(状态压缩&plus;分组背包)

    http://acm.hdu.edu.cn/showproblem.php?pid=6125 题意: 在${1,2,3,...n}$的数中选择1~k个数,使得它们的乘积不能被平方数整除(1除外),计算 ...

  3. hdu 6125 -- Free from square&lpar;状态压缩&plus;分组背包&rpar;

    题目链接 Problem Description There is a set including all positive integers that are not more then n. Ha ...

  4. HDU 6125 Free from square 状态压缩DP &plus; 分组背包

    Free from square Problem Description There is a set including all positive integers that are not mor ...

  5. HDU 6125 Free from square &lpar;状压DP&plus;背包&rpar;

    题意:问你从 1 - n 至多选 m 个数使得他们的乘积不能整除完全平方数. 析:首先不能整除完全平方数,那么选的数肯定不能是完全平方数,然后选择的数也不能相同的质因子. 对于1-500有的质因子至多 ...

  6. HDU 6125 Free from square &lpar;状压DP&plus;分组背包&rpar;

    题目大意:让你在1~n中选择不多于k个数(n,k<=500),保证它们的乘积不能被平方数整除.求选择的方案数 因为质数的平方在500以内的只有8个,所以我们考虑状压 先找出在n以内所有平方数小于 ...

  7. 2017 Wuhan University Programming Contest &lpar;Online Round&rpar; Lost in WHU 矩阵快速幂 一个无向图,求从1出发到达n最多经过T条边的方法数,边可以重复经过,到达n之后不可以再离开。

    /** 题目:Lost in WHU 链接:https://oj.ejq.me/problem/26 题意:一个无向图,求从1出发到达n最多经过T条边的方法数,边可以重复经过,到达n之后不可以再离开. ...

  8. 2017 Wuhan University Programming Contest &lpar;Online Round&rpar; C&period; Divide by Six 分析&plus;模拟

    /** 题目:C. Divide by Six 链接:https://oj.ejq.me/problem/24 题意:给定一个数,这个数位数达到1e5,可能存在前导0.问为了使这个数是6的倍数,且没有 ...

  9. 2017 Wuhan University Programming Contest &lpar;Online Round&rpar; B Color 树形dp求染色方法数

    /** 题目:Color 链接:https://oj.ejq.me/problem/23 题意:给定一颗树,将树上的点最多染成m种颜色,有些节点不可以染成某些颜色.相邻节点颜色不同.求染色方法数. 思 ...

随机推荐

  1. js 倒计时

    /** * 启动,秒杀倒计时. time格式:DDHH24MISS 例如: time="11223344"; * */function timer(time) { var d = ...

  2. grub4dos

    default 1 timeout 5 gfxmenu (hd0,0)/grub/message configfile #####以上不在第一分区无法加载 title HITSZ_COMMAND co ...

  3. javaMail创建邮件和发送邮件总结

    (注: 本文是参考http://www.cnblogs.com/xdp-gacl/p/4216311.html. 感谢博主的精彩的描述) 一, 前期的准备 1, 导入 mail.jar 二, 操作步骤 ...

  4. 3D开发--CopperCube

    CopperCube的常用接口,以及如何用javascript语言控制场景中的人物动作,或者获取任务的位置等信息

  5. Tensorflow tflearn 编写RCNN

    两周多的努力总算写出了RCNN的代码,这段代码非常有意思,并且还顺带复习了几个Tensorflow应用方面的知识点,故特此总结下,带大家分享下经验.理论方面,RCNN的理论教程颇多,这里我不在做详尽说 ...

  6. Python学习笔记22&colon;Django下载并安装

    Django它是一个开源Web应用程序框架.由Python书面. 通过MVC软件设计模式,这种模式M,视图V和控制器C. 它最初是一个数字新闻内容为主的网站已经发展到管理劳伦斯出版集团.那是,CMS( ...

  7. hive 的分隔符、orderby sort by distribute by的优化

    一.Hive 分号字符 分号是SQL语句结束标记,在HiveQL中也是,可是在HiveQL中,对分号的识别没有那么智慧,比如: select concat(cookie_id,concat(';',' ...

  8. 百度&comma;google的地理编码

    1.百度的地理编码:(不支持中国以外的其它城市) http://api.map.baidu.com/geocoder/v2/?ak=E974997f80db18330f8f5c61d084a677&a ...

  9. AJAX跨域问题解决方法(2)——JSONP解决跨域

    JSONP是什么?JSON全称为JSON with Padding,是JSON的一种补充的使用方式,不是官方协议. 使用JSONP服务器后台要改动吗?JSONP不同于一般的ajax请求返回json对象 ...

  10. Window 由于未经处理的异常,进程终止。

    今天遇到了一个程序停止的问题: 应用程序: BussinessService.exe Framework 版本: v4.0.30319 说明: 由于未经处理的异常,进程终止.异常信息: System. ...