HDU 6125 Free from square 状态压缩DP + 分组背包
Free from square
For each test case:
A single line contains two positive integers n,k(1≤n,k≤500).
A single line contains a nonnegative integer, denoting the answer.
4 2
6 4
19
- #include<bits/stdc++.h>
- using namespace std;
- #pragma comment(linker, "/STACK:102400000,102400000")
- #define ls i<<1
- #define rs ls | 1
- #define mid ((ll+rr)>>1)
- #define pii pair<int,int>
- #define MP make_pair
- typedef long long LL;
- typedef unsigned long long ULL;
- const long long INF = 1e18+1LL;
- const double pi = acos(-1.0);
- const int N = 5e2+, M = 1e3+,inf = 2e9,mod = 1e9+;
- int p[] = {,,,,,,,};
- vector<int > fi,se[N];
- int dp[][N][(<<)+],f[N];
- int solve(int n,int K) {
- fi.clear();
- memset(dp,,sizeof(dp));
- for(int i = ; i <= n; ++i) se[i].clear(),f[i] = ;
- fi.push_back();
- for(int i = ; i <= n; ++i) {
- int tmp = i,now = ,ok = ;
- for(int j = ; j < ; ++j) {
- int _ = ;
- while(tmp % p[j] == ) _++,now|=(<<j),tmp/=p[j];
- if(_ >= ) ok = ;
- }
- if(ok) {
- f[i] = now;
- if(tmp!=) se[tmp].push_back(i);
- else fi.push_back(i);
- }
- }
- int now = ;
- dp[][][] = ;
- for(int i = ; i < fi.size(); ++i) {
- now ^= ;memset(dp[now],,sizeof(dp[now]));
- for(int k = ; k <= K; ++k) {
- for(int j = ; j < (<<); ++j) {
- dp[now][k][j] += dp[now^][k][j];
- dp[now][k][j] %= mod;
- if((j&f[fi[i]])) continue;
- dp[now][k+][j|f[fi[i]]] += dp[now^][k][j];
- dp[now][k+][j|f[fi[i]]] %= mod;
- }
- }
- }
- for(int i = ; i <= n; ++i) {
- if(se[i].size() == ) continue;
- // cout<<"shit"<<endl;
- now^=;memset(dp[now],,sizeof(dp[now]));
- for(int h = ; h <= K; ++h) {
- for(int k = ; k < (<<); ++k) {
- dp[now][h][k] += dp[now^][h][k];
- dp[now][h][k] %= mod;
- for(int j = ; j < se[i].size(); ++j) {
- if((f[se[i][j]]&k)) continue;
- dp[now][h+][f[se[i][j]]|k] += dp[now^][h][k];
- dp[now][h+][f[se[i][j]]|k] %= mod;
- }
- }
- }
- }
- int ans = ;
- for(int i = ; i <= K; ++i) {
- for(int j = ; j < (<<); ++j)
- ans += dp[now][i][j],ans %= mod;
- }
- return ans;
- }
- int main() {
- int T,n,k;
- scanf("%d",&T);
- while(T--) {
- scanf("%d%d",&n,&k);
- printf("%d\n",solve(n,k));
- }
- return ;
- }
- /*
- 2
- 4 2
- 6 4
- */
HDU 6125 Free from square 状态压缩DP + 分组背包的更多相关文章
- HDU 6125 Free from square (状压DP+分组背包)
题目大意:让你在1~n中选择不多于k个数(n,k<=500),保证它们的乘积不能被平方数整除.求选择的方案数 因为质数的平方在500以内的只有8个,所以我们考虑状压 先找出在n以内所有平方数小于 ...
- hdu 6125 -- Free from square(状态压缩+分组背包)
题目链接 Problem Description There is a set including all positive integers that are not more then n. Ha ...
- hdu 5025 Saving Tang Monk 状态压缩dp+广搜
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092939.html 题目链接:hdu 5025 Saving Tang Monk 状态压缩 ...
- HDU 3681 Prison Break(状态压缩dp + BFS)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3681 前些天花时间看到的题目,但写出不来,弱弱的放弃了.没想到现在学弟居然写出这种代码来,大吃一惊附加 ...
- HDU 1074 Doing Homework【状态压缩DP】
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1074 题意: 给定作业截止时间和完成作业所需时间,比截止时间晚一天扣一分,问如何安排作业的顺序使得最 ...
- HDU 1074 Doing Homework (状态压缩DP)
Doing Homework Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- HDU 6125 Free from square (状压DP+背包)
题意:问你从 1 - n 至多选 m 个数使得他们的乘积不能整除完全平方数. 析:首先不能整除完全平方数,那么选的数肯定不能是完全平方数,然后选择的数也不能相同的质因子. 对于1-500有的质因子至多 ...
- HDU 1074 Doing Homework ——(状态压缩DP)
考虑到n只有15,那么状压DP即可. 题目要求说输出字典序最小的答案的顺序,又考虑到题目给出的字符串本身字典序是递增的,那么枚举i的时候倒着来即可.因为在同样完成的情况下,后选字典序大的,小的字典序就 ...
- HDU 1074 (状态压缩DP)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1074 题目大意:有N个作业(N<=15),每个作业需耗时,有一个截止期限.超期多少天就要扣多少 ...
随机推荐
- [jenkins学习篇] 安装jenkins
1 下载war包,https://jenkins.io/download/ 2 安装jar包,java -jar jenkins.war 3 打开网址:http://localhost:8080 4 ...
- Android隐藏软键盘收回软键盘
代码改变世界 Android隐藏软键盘收回软键盘 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPU ...
- 算法复习——数位dp(不要62HUD2089)
题目 题目描述 杭州人称那些傻乎乎粘嗒嗒的人为 62(音:laoer). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司 ...
- mybatis学习(二)——环境搭建
开发环境搭建主要包括以下几步 1.新建一个JAVA项目(可以只建一个文件夹) 2.导入jar包 log4j是一个日志包,可以不加,这里为了定位问题添加了该包,下面两个包必须需要. 3.创建数据库 C ...
- ES6的一些说明
一 ES6 即 ECMAScript6 ECMAScript 6.0(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了.它的目标,是使得JavaScript语言可 ...
- 关于虚拟机IP网段和公司内网网段的问题?
开发四年只会写业务代码,分布式高并发都不会还做程序员?->>> 请教一个问题,为了解决电脑换网络环境就连不上虚拟机的问题,我虚拟机使用的nat模式,我的VMnet8IP是192 ...
- Yii 之cookie的使用
public function actionIndex(){ //设置cookie(注意这里用的是响应组件) $cookies = \YII::$app->response->cookie ...
- Redis命令行之Zset
一.Redis之Zset简介 1. 有序集合Zset是String类型的有序集合. 2. Zset中每个元素都会关联一个double类型的分数值,redis通过分数值来为集合中所有成员进行从小到大排序 ...
- 模拟用户登录-SpringMVC+Spring+Mybatis整合小案例
1. 导入相关jar包 ant-1.9.6.jarant-launcher-1.9.6.jaraopalliance.jarasm-5.1.jarasm-5.2.jaraspectj-weaver.j ...
- SGU104 二维dp
大致题意: n个东西放在(1.2.3...m)个容器中,先放的必需在后方的左边.a[i][j]表示i号物品放在j容器所得 的价值,求最大价值. 几乎是刚刚开始接触动态规划题,开始我这样想 每个东西一件 ...