Codeforces 454D - Little Pony and Harmony Chest
454D - Little Pony and Harmony Chest
思路:
状压dp,由于1的时候肯定满足题意,而ai最大是30,所以只要大于等于59都可以用1替换,所以答案在1到59之间
然后筛出1到58之间的质数,只有16个,把1到58的数的状态由这16个质数表示,如果整除这个质数则二进制中这一位为1,否则则为0
状态:dp[i][j]表示到第i个数为止选取的数的状态为j的最小差和
初始状态:dp[0][0]=0
状态转移:
dp[i+1][j|sta[k]]=min(dp[i+1][j|sta[k]],dp[i][j]+abs(k-a[i+1]))(j&sta[k]==0,1<=k<=58)
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a)) const int INF=0x3f3f3f3f;
int sta[];
int a[];
int res[];
int dp[][(<<)+];
int ans[][(<<)+];
int prime[]={,,,,,,,,,,,,,,,};
int getsta(int x){
int ans=;
for(int i=;i<;i++){
if(x%prime[i]==)ans|=<<i;
}
return ans;
}
void dfs(int n,int s){
if(n==)return ;
res[n]=ans[n][s];
dfs(n-,s^sta[res[n]]);
}
int main(){
ios::sync_with_stdio(false);
cin.tie();
for(int i=;i<;i++){
sta[i]=getsta(i);
}
int n;
cin>>n;
for(int i=;i<=n;i++)cin>>a[i];
mem(dp,INF);
mem(ans,-);
dp[][]=ans[][]=;
for(int i=;i<n;i++){
for(int j=;j<(<<);j++){
if(ans[i][j]==-)continue;
for(int k=;k<;k++){
if(j&sta[k])continue;
int s=j|sta[k];
if(ans[i+][s]==-||dp[i][j]+abs(k-a[i+])<dp[i+][s]){
dp[i+][s]=dp[i][j]+abs(k-a[i+]);
ans[i+][s]=k;
}
}
}
}
int mn=INF,s=;
for(int i=;i<(<<);i++){
if(dp[n][i]<mn){
mn=dp[n][i];
s=i;
}
}
dfs(n,s);
for(int i=;i<=n;i++)cout<<res[i]<<" ";
cout<<endl;
return ;
}
Codeforces 454D - Little Pony and Harmony Chest的更多相关文章
- Codeforces 453B Little Pony and Harmony Chest:状压dp【记录转移路径】
题目链接:http://codeforces.com/problemset/problem/453/B 题意: 给你一个长度为n的数列a,让你构造一个长度为n的数列b. 在保证b中任意两数gcd都为1 ...
- Codeforces 4538 (状态压缩dp)Little Pony and Harmony Chest
Little Pony and Harmony Chest 经典状态压缩dp #include <cstdio> #include <cstring> #include < ...
- 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 ...
- CF453B Little Pony and Harmony Chest (状压DP)
CF453B CF454D Codeforces Round #259 (Div. 2) D Codeforces Round #259 (Div. 1) B D. Little Pony and H ...
- [CF453B]Little Pony and Harmony Chest
[CF453B]Little Pony and Harmony Chest 题目大意: 给你一个长度为\(n(n\le100)\)的正整数序列\(A(A_i\le30)\),求一个正整数序列\(B\) ...
- CF 435B Little Pony and Harmony Chest
Little Pony and Harmony Chest 题解: 因为 1 <= ai <= 30 所以 1 <= bi <= 58, 因为 59 和 1 等效, 所以不需 ...
- M - Little Pony and Harmony Chest 状压dp
M - Little Pony and Harmony Chest 怎么感觉自己越来越傻了,都知道状态的定义了还没有推出转移方程. 首先这个a的范围是0~30 这里可以推出 b数组的范围 0~60 ...
- codeforces 454 D. Little Pony and Harmony Chest(状压dp)
题目链接:http://codeforces.com/contest/454/problem/D 题意:给定一个序列a, 求一序列b,要求∑|ai−bi|最小.并且b中任意两数的最大公约数为1. 题解 ...
- Codeforces Round #259 (Div. 2)-D. Little Pony and Harmony Chest
题目范围给的很小,所以有状压的方向. 我们是构造出一个数列,且数列中每两个数的最大公约数为1; 给的A[I]<=30,这是一个突破点. 可以发现B[I]中的数不会很大,要不然就不满足,所以B[I ...
随机推荐
- location对象查询字符串参数
虽然location.search可以返回从问号到URL末尾的所有内容,但却没有办法逐个访问其中的每个查询字符串参数.为此,可以创建下面这样一个函数,用以解析查询字符串,然后返回包含所有参数的一个对象 ...
- python解决matplotlib中文坐标值乱码的问题
加上这句话即可 plt.rcParams['font.sans-serif']=['SimHei'] 效果:
- Azkaban 简介
本文简单介绍一下Azkaban及其特点.azkaban是一个开源的任务调度系统,用于负责任务的调度运行(如数据仓库调度),用以替代linux中的crontab. 一.Azkaban是什么? 1.1 A ...
- python xml练习:从database.xml文件取databaselist的ip、name、passwd,写入列表
xml: <?xml version='1.1' encoding='utf-8'?><!--this is a test about xml--><databaseli ...
- Linux基础命令---fsck
fsck 检查或者修复指定的文件系统,可以是设备名.挂载点,还可以是一个ext2的label,或者是一个UUID.此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.ope ...
- css去掉a标签点击后的虚线框,outline,this.blur()
css去掉a标签点击后的虚线框,outline,this.blur() outline是css3的一个属性,用的很少.声明,这是个不能兼容的css属性,在ie6.ie7.遨游浏览器都不兼容. outl ...
- mybatis项目启动报错 The content of element type "resultMap" must match "(constructor?,id*,result*,association*,collection*,discriminator?)".
启动项目报错 2018-02-26 17:09:51,535 ERROR [org.springframework.web.context.ContextLoader] - Context initi ...
- DNS视图及压力测试(四)
Bind安全控制选项 Allow-transfer {}; #用于控制区域传送文件 Allow-query {}; #通常用于服务器是缓存名称服务器时,控制查询客户端 Allow-recursion ...
- 华为C/C++笔试题&答案
1.static有什么用途?(请至少说明两种) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变. 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问 ...
- python百分号%—%s、%d、%f
百分号%表示占位符,在后续通过%传入真实的值 %s 拼接字符串,实际可以接受任何类型的值 %d 只能拼接整数数字 %.nf 四舍五入拼接浮点数,n表示保留到小数点后n位,不加.n默认保留6位小数 ...