LGTB与序列 状压dp
考试一看我就想到了状压dp。当时没有想到素数,以为每一位只有0~9这些数,就开始压了。后来发现是小于30,然后改到了15,发现数据一点不给面子,一个小点得数都没有,完美爆零。。
考虑到bi最多变成58,如果变成更大的数还不如变成1,而且58之内只有16个素数,所以就压这16个素数就行了。就是他们的素数因子。
f[i][j]表示到第i位质因数压进去状态为j时最短序列;
f[i][j|prime[k]]=min(f[i][j|prime[k]],f[i-1][j]+abs(a[i]-k));
注意排序一下这些数,找前16个就行,因为最多有16个素数,其他的就都是1了,不要忘了最后加上。
PS:我的代码打表打过去的。借用一下同学的。
#include #include #include #include #include #include using namespace std; int n,ji=0,jishu,shu=0x7fffffff; int a[150],b[150],prime[100],f[110][1<<16],zhi[70]; bool su[5050]; int pai(const int a,const int b) { return a>b; } int xiao(int x,int y) { if(x<=y) return x; else return y; } int lowbit(int x) { return x&-x; } int zhao(int x) { int shu=0; while(x>0) { if(x&1) return shu; x>>=1; shu++; } return shu; } int count(int x) { int shu=0; while(x>0) { if(x&1) shu++; x>>=1; } return shu; } int main() { //freopen("seq.in","r",stdin); //freopen("seq.out","w",stdout); memset(su,0,sizeof(su)); memset(f,0x3f,sizeof(f)); memset(prime,0,sizeof(prime)); memset(zhi,0,sizeof(zhi)); cin>>n; for(int i=1;i<=n;++i) cin>>a[i]; f[0][0]=0; sort(a+1,a+n+1,pai); su[1]=1; for(int i=2;i<=10;++i) for(int j=2;j<=50;++j) su[i*j]=1; for(int i=2;i<=58;++i) if(su[i]==0) prime[i]=++ji; for(int i=2;i<=61;++i) for(int j=2;j<=i;++j) { if(i%j==0&&prime[j]!=0) zhi[i]|=(1<<(prime[j]-1)); } for(int i=0;i for(int j=0;j<(1<<16);++j) for(int k=1;k<=60;++k) { if((j&zhi[k])==0) f[i+1][j|zhi[k]]=xiao(f[i+1][j|zhi[k]],f[i][j]+abs(a[i+1]-k)); } for(int i=0;i<(1<<16);++i) if(f[xiao(n,16)][i] shu=f[xiao(n,16)][i]; if(n<=16) cout<<shu; else { for(int i=17;i<=n;++i) shu+=abs(a[i]-1); cout<<shu; } //system("pause"); return 0; }
LGTB与序列 状压dp的更多相关文章
- 状压DP之LGTB 与序列
题目 思路 这道题竟然是状压DP,本人以为是数论,看都没看就去打下一题的暴力了,哭 \(A_i\)<=30,所以我们只需要考虑1-58个数,再往后选的话还不如选1更优,注意,1是可以重复选取的, ...
- 2018.10.05 NOIP模拟 上升序列(状压dp)
传送门 状压dp好题. 首先需要回忆O(nlogn)O(nlog n)O(nlogn)求lislislis的方法,我们会维护一个单调递增的ddd数组. 可以设计状态f(s1,s2)f(s1,s2)f( ...
- ZOJ3802 Easy 2048 Again (状压DP)
ZOJ Monthly, August 2014 E题 ZOJ月赛 2014年8月 E题 http://acm.zju.edu.cn/onlinejudge/showProblem.do?proble ...
- fzu2188 状压dp
G - Simple String Problem Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%I64d & ...
- zoj3802:easy 2048 again(状压dp)
zoj月赛的题目,非常不错的一个状压dp.. 题目大意是一个一维的2048游戏 只要有相邻的相同就会合并,合并之后会有奖励分数,总共n个,每个都可以取或者不取 问最终得到的最大值 数据范围n<= ...
- [poj1185]炮兵阵地_状压dp
炮兵阵地 poj-1185 题目大意:给出n列m行,在其中添加炮兵,问最多能加的炮兵数. 注释:n<=100,m<=10.然后只能在平原的地方建立炮兵. 想法:第2到状压dp,++.这题显 ...
- [HNOI2012]集合选数(状压DP+构造)
题目要求若出现x,则不能出现2x,3x 所以我们考虑构造一个矩阵 \(1\ 2\ 4 \ 8--\) \(3\ 6\ 12\ 24--\) \(9\ 18\ 36--\) \(--\) 不难发现,对于 ...
- our happy ending(状压dp)
题意:给定一个n,k,l. 问有多少长度为n的序列满足选出一些数使得他们相加为k,数列中每个数都在1-l以内. Solution 正解还是很妙的. 状压dp,设dp[i][j]表示长度为i的序列,能表 ...
- NowCoder110E Pocky游戏 状压DP
传送门 题意:给出$N$个数和一个长为$M$.所有数在$[1,N]$范围之内的正整数序列$a_i$,求出这$N$个数的一种排列$p_1...p_N$使得$\sum\limits_{i=2}^M |p_ ...
随机推荐
- [leetcode-438-Find All Anagrams in a String]
Given a string s and a non-empty string p, find all the start indices of p's anagrams in s.Strings c ...
- 【Android Developers Training】 62. 搭建一个OpenGL ES环境
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 用Eclipse的snippets功能实现代码重用
snippets功能实现代码重用 Snippets 代码片段是Eclipse的一个插件. 很多时候可以通过这个功能,重复使用常用的代码片段,加快开发效率. 创建一个代码段的步骤: 在Eclipse的e ...
- jQery的链式操作和商城简易导航栏
今天要记录的是jq的一些简单操作.项目的需求是做一个导航栏,单机不同的商品名称链接,显示相应的内容.用js来写的话相对代码量要多一些,选择jqrey一行则可以搞定,下面呢是我的代码和效果图 这个是初始 ...
- Java基础(7)-异常处理
异常处理 异常继承层次 Throwable |-Error 致命的错误无法处理 |-Exception |-IOException 系统资源读取失败等错误 |-RuntimeException(未检异 ...
- accp8.0转换教材第10章Ajax和jQuery理解与练习
C/S (Client/Server)结构,即大家熟知的客户机和服务器结构. B/S(Browser/Server)结构即浏览器和服务器结构. 认识ajax .XMLHttpRequest.使用jqu ...
- MySQL(二)--事务与视图
一.事务 1.提交 2.回滚 3.ACID特性 二.视图 1.创建视图 2.删除视图 3.更新视图 4.使用视图 三.子查询 1. 使用子查询 2. 标量子查询 3. 关联子查询 一.事务 在 RDB ...
- Vijos 1007 绕钉子的长绳子
背景 平面上有N个圆柱形的大钉子,半径都为R,所有钉子组成一个凸多边形. 现在你要用一条绳子把这些钉子围起来,绳子直径忽略不计. 描述 求出绳子的长度 格式 输入格式 第1行两个数:整数N(1< ...
- VB6之CRC32
翻译篇:http://www.cnblogs.com/duzouzhe/archive/2009/08/05/1539543.html Private Declare Function GetTick ...
- 给xcode项目修改名字
在xcode项目开发中,经常会遇到需要修改项目名字的问题, 但是xcode本身修改项目名字比较麻烦,有时候修改的不完全,有时候修改了项目无法打开,无奈只能建一个新项目.这里提供一种修改xcode项目名 ...