test20181018 B君的第三题
题意
B 君的第三题(shenyang)
题目描述
客似云来,万里无云
B 君得到了一个数组\(\{a_1,a_2,\dots,a_n\}\)。
B 君想通过修改让数组中个每对数都互质。
每次使一个数+1 或者-1 的代价是1。
不能将\(a_i\) 修改为0 或者负数。
问至少多少代价才可以让所有数两两互质。
输入格式
第一行一个整数n。
第二行n 个整数\(a_i\),表示数组初始值。
输出格式
一行一个数表示答案。
样例输入
5
2 4 6 8 10
样例输出
4
样例解释
修改为2, 3, 5, 7, 11。
数据规模与约定
对于100% 的数据,满足\(1 \leq n \leq 100, 1 \leq a_i \leq 30\)。
对于30% 的数据,满足\(1 \leq n \leq 4\)。
对于另30% 的数据,满足\(1 \leq a_i \leq 10\)。
分析
因为\(a_i \leq 30\),1跟所有数互质,所以往下最多改到1,往上最多改到59,所以每个数所含质因数是固定的。
考虑dp,用\(f(i,s)\)表示前i个数改动至只含s集合中的质因数且两两互质所需最小代价,转移方程为:
枚举从原来的含k的集合转移过来,其中k与s没有交集 \\
f(i,k∨s)=\min_{x=1}^{59}f(i-1,k)+|a_i-x|
\]
时间复杂度\(O(n \cdot 59 \cdot 2^{17})\),上界十分不紧。
代码
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<string>
#include<vector>
#include<list>
#include<deque>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<bitset>
#include<algorithm>
#include<complex>
#define rg register
#define il inline
#define co const
#pragma GCC optimize ("O0")
using namespace std;
template<class T> il T read()
{
T data=0;
int w=1;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')
w=-1;
ch=getchar();
}
while(isdigit(ch))
data=10*data+ch-'0',ch=getchar();
return data*w;
}
template<class T> il T read(T&x)
{
return x=read<T>();
}
typedef long long ll;
const int INF=0x7fffffff;
int p[17]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59};
il int bit(rg int x)
{
rg int s=0;
for(rg int i=0;i<17;++i)
if(x%p[i]==0)
s|=(1<<i);
return s;
}
int b[60];
const int MAXN=107;
int f[MAXN][1<<17];
int main()
{
freopen("shenyang.in","r",stdin);
freopen("shenyang.out","w",stdout);
memset(f,0x3f,sizeof f);
f[0][0]=0;
rg int n=read<int>();
for(rg int i=1;i<=59;++i)
b[i]=bit(i);
for(rg int i=1;i<=n;++i)
{
rg int a=read<int>();
for(rg int j=1;j<=59;++j)
{
rg int ub=((1<<17)-1)^b[j];
for(rg int k=ub;;--k&=ub)
{
f[i][k|b[j]]=min(f[i][k|b[j]],f[i-1][k]+abs(a-j));
if(k==0)
break;
}
}
}
rg int ans=INF,up=(1<<17)-1;
for(rg int i=0;i<=up;++i)
ans=min(ans,f[n][i]);
printf("%d\n",ans);
// fclose(stdin);
// fclose(stdout);
return 0;
}
test20181018 B君的第三题的更多相关文章
- test20181016 B君的第三题
题意 B 君的第三题(haskell) 题目描述 大学四年,我为什么,为什么不好好读书,没找到和你一样的工作. B 君某天看到了这样一个题,勾起了无穷的回忆. 输入\(n, k\) 和一棵\(n\) ...
- test20181015 B 君的第三题
题意 B 君的第三题(zhengzhou) 题目描述 让你在战争和耻辱中做一块选择,你选择耻辱,可你将来还得进行战争. 在平面上有n 个整点(横纵坐标都是整数) B 君想找到一个整点,使得这个点,到所 ...
- test20181019 B君的第三题
题意 B 君的第三题(urumqi) 题目描述 风雨如晦,鸡鸣不已. B 君最近在研究自己的学长都在做什么工作,每个学长属于一个公司. B 君会获得一些信息,比如x 和y 在相同公司,x 和y 在不同 ...
- noiac132 B君的第三题 (树形dp)
传送门 本来想用点分治做,结果root又求不对 算的时候还算错了 我好菜啊 结果szr大佬告诉我是树形dp 我好菜啊!! 我们有$\lceil \frac{x}{k} \rceil = \frac{x ...
- shanquan2的两年三题系列
好像只有2个月就退役啦 不管了,先说一下哪三题:多点求值.lcm.替罪羊树(bzoj3065) [upd0]2016.3.29 多点求值A掉啦,myy卡常数sxbk(不是说好的是shanquan2出的 ...
- Java-集合-第三题 有如下Student 对象, private String name; private int age; private int score; private String classNum; 其中,classNum 表示学生的班号,例如“class05”。 有如下List List list = new ArrayList(); l
第三题 有如下Student 对象, private String name; private int age; private int score; private String classNum; ...
- NOIP 2008提高组第三题题解by rLq
啊啊啊啊啊啊今天已经星期三了吗 那么,来一波题解吧 本题地址http://www.luogu.org/problem/show?pid=1006 传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们 ...
- NOIP2008提高组(前三题) -SilverN
此处为前三题,第四题将单独发布 火柴棒等式 题目描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0 ...
- 《学习OpenCV》练习题第四章第三题b
#include <highgui.h> #include <cv.h> #include "opencv_libs.h" /* *<学习OpenCV ...
随机推荐
- cookie—基于js的coolie使用
//设置cookie function setCookie(name,value) { var Days = 30; var exp = new Date(); exp.setTime(exp.get ...
- Vim简明教程【CoolShell】(转)
m的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的.下面的文章翻译自<Learn Vim Progressiv ...
- VS异常--未找到与约束 ContractName Microsoft.VisualStudio.Language.Intellisense.IGlyphService RequiredTypeIdentity
早上打开项目的时候突然遇到这么个错误: ======================= 未找到与约束 ContractName Microsoft.VisualStudio.Language.Inte ...
- PHP搞笑注释代码-佛祖配美女
//////////////////////////////////////////////////////////////////// // _ooOoo_ // // o8888888o // / ...
- Tomcat启动报错:StandardServer.await: create[8005] java.net.BindException: Cannot assign requested address
Tomcat启动报错:StandardServer.await: create[8005] java.net.BindException: Cannot assign requested addres ...
- 20145118 《Java程序设计》 第3周学习总结
20145118 <Java程序设计> 第3周学习总结 教材学习内容总结 第四章开始接触到了Java的核心内容---对象这个概念,在这里为避免混淆,列举面向过程和面向对象的区别: 面向对象 ...
- phpstorm2016.1 添加对Drupal的编程支持
一.前言 phpstorm作为目前对drupal支持最好的开发工具之一,是drupal模块开发的首选工具.今天我就来谈谈最新的phpstorm如何添加对drupal模块的支持. 相关环境:操作系统ub ...
- JQuery Ajax jsonp
JQuery ajax jsonp $.ajax({ method:"POST", url:"http://localhost:8081/ChenLei/PeopleSe ...
- 【日志】修改redis日志路径
redis默认不记录log文件,需要在Redis.conf文件,找到loglevel notice,在其后的logfile "",双引号中,写redis的路径"/redi ...
- [JS] - level8 kata
https://www.codewars.com/kata/57e3f79c9cb119374600046b function hello(name) { if(name == "" ...