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_ ...
随机推荐
- (cljs/run-at (JSVM. :browser) "命名空间就这么简单")
前言 一个cljs文件定义一个命名空间,通过命名空间可以有效组织代码,这是构建大型系统必备的基础设施.本篇我们就深入理解cljs中的命名空间吧! 好习惯从"头"开始 每个cljs ...
- 在ASP.NET Core配置环境变量和启动设置
在这一部分内容中,我们来讨论ASP.NET Core中的一个新功能:环境变量和启动设置,它将开发过程中的调试和测试变的更加简单.我们只需要简单的修改配置文件,就可以实现开发.预演.生产环境的切换. A ...
- JavaSE中Collection集合框架学习笔记(1)——具有索引的List
前言:因为最近要重新找工作,Collection(集合)是面试中出现频率非常高的基础考察点,所以好好恶补了一番. 复习过程中深感之前的学习不系统,而且不能再像刚毕业那样死背面试题,例如:String是 ...
- [高并发]EntityFramework之高性能扩展
目录 简介 读写分离 指定字段更新 事务 Entity 简介 本EF扩展插件将持续更新:开源,敏捷,高性能.(由于EF Core暂未提供方便的钩子位置,暂无EF Core版本) EntityFrame ...
- Java 中基本类型和字符串之间的转换
Java 中基本类型和字符串之间的转换 在程序开发中,我们经常需要在基本数据类型和字符串之间进行转换. 其中,基本类型转换为字符串有三种方法: 1. 使用包装类的 toString() 方法 2. 使 ...
- HTML form表单小结
HTML form标签小结 最近研究 form标签,有一些小心得写下来与大家分享分享,共勉.在小结的最后有一个form表单的小例子,可以作为参考. -----DanlV form是HTML的一个极为重 ...
- Laravel安装及环境的配置(XAMPP集成开发环境下)
Laravel 使用 Composer 来管理代码依赖.所以,在使用 Laravel 之前,请先确认你的电脑上安装了 Composer. 操作系统为win7: 集成开发环境XAMPP: 第一步:安装C ...
- 【故障处理】ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
今天在使用冷备份文件重做从库时遇到一个报错,值得研究一下. 版本:MySQL5.6.27 一.报错现象 dba:(none)> start slave; ERROR (HY000): Slave ...
- Ambari安装之部署3个节点的HA分布式集群
前期博客 Ambari安装之部署单节点集群 其实,按照这个步骤是一样的.只是按照好3个节点后,再做下HA即可. 部署3个节点的HA分布式集群 (1)添加机器 和添加服务的操作类似,如下图 之后的添加a ...
- webgl开发第一道坎——矩阵与坐标变换
一.齐次坐标 在3D世界中表示一个点的方式是:(x, y, z);然而在3D世界中表示一个向量的方式也是:(x, y, z);如果我们只给一个三元组(x, y, z)鬼知道这是向量还是点,毕竟点与向量 ...