Codeforces Round #259 (Div. 2) D
4 seconds
256 megabytes
standard input
standard output
Princess Twilight went to Celestia and Luna's old castle to research the chest from the Elements of Harmony.
A sequence of positive integers bi is harmony if and only if for every two elements of the sequence their greatest common divisor equals 1. According to an ancient book, the key of the chest is a harmony sequence bi which minimizes the following expression:
You are given sequence ai, help Princess Twilight to find the key.
The first line contains an integer n (1 ≤ n ≤ 100) — the number of elements of the sequences a and b. The next line contains n integersa1, a2, ..., an (1 ≤ ai ≤ 30).
Output the key — sequence bi that minimizes the sum described above. If there are multiple optimal sequences, you can output any of them.
5
1 1 1 1 1
1 1 1 1 1
5
1 6 4 2 8
1 5 3 1 8
sl : 很傻比的状态压缩,直接背包就搞了,又傻逼了。
// by caonima
// hehe
#include <bits/stdc++.h>
using namespace std;
const int MAX= ;
const int inf = 0x3f3f3f3f;
int dp[MAX][<<],val[MAX],a[MAX],ans[MAX][<<];
int prime[MAX],vis[MAX],cur=;
vector<int> C;
void init() {
memset(vis,,sizeof(vis));
vis[]=;
for(int i=;i<;i++) {
if(!vis[i]) prime[cur++]=i;
for(int j=i;j<;j+=i) vis[j]=;
}
return ;
}
int main() {
init();
int n;
while(scanf("%d",&n)==) {
memset(val,,sizeof(val));
for(int i=;i<=n;i++) {
scanf("%d",&a[i]);
}
for(int i=;i<;i++) {
for(int j=;j<cur;j++) {
if(i%prime[j]==) {
val[i]|=(<<j);
}
}
}
for(int i=;i<=n;i++) {
for(int j=;j<(<<cur);j++) dp[i][j]=inf;
}
for(int i=;i<(<<cur);i++) dp[][i]=;
for(int i=;i<=n;i++) {
for(int j=;j<(<<cur);j++) {
for(int k=;k<;k++) {
if((j&val[k])==) {
int res=dp[i-][j^val[k]]+abs(k-a[i]);
if(res<dp[i][j]) {
dp[i][j]=res;
ans[i][j]=k;
}
}
}
}
}
int res=inf ,state;
for(int i=;i<(<<cur);i++) {
if(res>dp[n][i]) {
res=dp[n][i];
state=i;
}
}
// printf("%d\n",ans[n][0]);
for(int i=n;i>=;i--) {
C.push_back(ans[i][state]);
int k=ans[i][state];
state=state^(val[k]);
}
for(int i=C.size()-;i>=;i--) {
printf("%d ",C[i]);
}
printf("\n");
}
return ;
}

#define debug() printf("sss");
using namespace std;
const int inf = 0x3f3f3f3f;
const int MAX = ;
int cur=,vis[MAX],prime[MAX],state[MAX];
vector<int> C;
int dp[MAX][<<],a[MAX],b[MAX],n,res[MAX][<<];
void init() {
for(int i=;i<MAX;i++) {
if(!vis[i]) prime[cur++]=i;
for(int j=i;j<MAX;j+=i) vis[j]=;
}
memset(state,,sizeof(state));
for(int i=;i<;i++) {
for(int j=;j<;j++) {
if(i%prime[j]==) state[i]|=(<<j);
}
}
}
int dfs(int pos,int s) {
if(pos>n) return ;
if(~dp[pos][s]) return dp[pos][s];
int ans=inf;
for(int i=;i<;i++) {
if(s&state[i]) continue;
int t=dfs(pos+,s|state[i])+abs(i-a[pos]);
if(ans>t) {
ans=t;
res[pos][s]=i;
}
}
return dp[pos][s]=ans;
}
int main() {
init();
while(scanf("%d",&n)==) {
for(int i=;i<=n;i++) {
scanf("%d",&a[i]);
}
memset(dp,-,sizeof(dp));
dfs(,);
int s=;
for(int i=;i<=n;i++) {
C.push_back(res[i][s]);
int k=res[i][s];
s=s|(state[k]);
}
for(int i=;i<C.size();i++) {
printf("%d ",C[i]);
}
printf("\n");
}
}
Codeforces Round #259 (Div. 2) D的更多相关文章
- Codeforces Round #259 (Div. 2)AB
链接:http://codeforces.com/contest/454/problem/A A. Little Pony and Crystal Mine time limit per test 1 ...
- Codeforces Round #259 (Div. 1) A. Little Pony and Expected Maximum 数学公式结论找规律水题
A. Little Pony and Expected Maximum Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.c ...
- Codeforces Round #259 (Div. 2)
A. Little Pony and Crystal Mine 水题,每行D的个数为1,3.......n-2,n,n-2,.....3,1,然后打印即可 #include <iostream& ...
- Codeforces Round #259 (Div. 2)-D. Little Pony and Harmony Chest
题目范围给的很小,所以有状压的方向. 我们是构造出一个数列,且数列中每两个数的最大公约数为1; 给的A[I]<=30,这是一个突破点. 可以发现B[I]中的数不会很大,要不然就不满足,所以B[I ...
- Codeforces Round #259 (Div. 2) C - Little Pony and Expected Maximum (数学期望)
题目链接 题意 : 一个m面的骰子,掷n次,问得到最大值的期望. 思路 : 数学期望,离散时的公式是E(X) = X1*p(X1) + X2*p(X2) + …… + Xn*p(Xn) p(xi)的是 ...
- Codeforces Round #259 (Div. 2) C - Little Pony and Expected Maximum
题目链接 题意:一个m个面的骰子,抛掷n次,求这n次里最大值的期望是多少.(看样例就知道) 分析: m个面抛n次的总的情况是m^n, 开始m==1时,只有一种 现在增加m = 2, 则这些情况是新增 ...
- Codeforces Round #259 (Div. 2) D. Little Pony and Harmony Chest 状压DP
D. Little Pony and Harmony Chest Princess Twilight went to Celestia and Luna's old castle to resea ...
- Codeforces Round #259 (Div. 1)A(公式)
传送门 题意 给出m个面的骰子扔n次,取最大值,求期望 分析 暴力算会有重复,而且复杂度不对. 考虑m个面扔n次得到m的概率,发现只要减去(m-1)个面扔n次得到m-1的概率即可,给出example说 ...
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
随机推荐
- 基于Ubuntu14.04下Suricata(一款高性能的网络IDS、IPS和网络安全监控引擎)的搭建(图文详解)(博主推荐)
为什么,要写这篇论文? 是因为,目前科研的我,正值研三,致力于网络安全.大数据.机器学习研究领域! 论文方向的需要,同时不局限于真实物理环境机器实验室的攻防环境.也不局限于真实物理机器环境实验室的大数 ...
- Ubuntu卸载软件包
sudo apt-get autoremove --purge mysql-server-5.0 ,purge连同配置文件一起删除,autoremove自动卸载依赖包sudo apt-get remo ...
- [转]在 Azure 云服务上设计大规模服务的最佳实践
本文转自:http://technet.microsoft.com/zh-cn/magazine/jj717232.aspx 英文版:http://msdn.microsoft.com/library ...
- Mac下Eclipse/adb无法调试MX5手机
前提是环境已经配置好,其他手机可以连接但MX系列不可以 解决方法:打开终端 echo 0x2a45 >> ~/.android/adb_usb.ini adb kill-server ad ...
- iTOP-4412开发板全新升级支持4G全网通模块
开发板支持4G,GPS,CAN,485,WIFI蓝牙,重力加速度计,陀螺仪等模块. 核心板参数 尺寸:6cm*7cm 高度:连同连接器在内0.26cm CPU:Exynos4412,四核Cortex- ...
- Google浏览器开发者工具:CSSViewer(一个Css查看器)
CSSViewer的简介 CSSViewer是一款可以帮助用户快速查看当前的网页元素的CSS属性的谷歌浏览器插件,在Chrome中安装了CSSViewer插件以后,用户就可以在设计网页的时候,快速地模 ...
- 【原创】webbluetoorh 在windows下无法显示搜索列表,在mac下正常的解决办法
google webbluetooth在windows下不能弹出设备搜索列表提示“Web Bluetooth API is not available”,因为webbluetooth是google新推 ...
- React和webpack解决 waiting for roots to load...to reload the inspector
使用chrome调试工具,react-devtools总是显示 "waiting for roots to load...to reload the inspector" and ...
- jsonP 现在360浏览器竟然阻止本机 jquery load一些html js什么的
别的浏览器正常可以jquery.load本机文件,但是360浏览器不行了,缺德啊!! jsonP代码 index3.html <!DOCTYPE HTML PUBLIC "-//W3C ...
- jQuery动态移除和绑定事件
function bindEvent() { //移除绑定事件 $('.btnsp').unbind('click'); //绑定事件 $('.btnsp').bind('click', functi ...