【【henuacm2016级暑期训练】动态规划专题 M】Little Pony and Harmony Chest
【链接】  我是链接,点我呀:) 
 【题意】
在这里输入题意
【题解】
每一位显然只要取1..60这些数字。
然后需要保证每个这些数字里面,每个数字所用到的质因子都它所唯一拥有的。别人不能用
因为如果别人用了的话。gcd就不为1了。
因此我们肯定需要记录这些数字的质因子使用情况。
如果第i个位置枚举的数字,它里面的某个质因子,之前用过了。那么这个数字就不能用。
否则还可以用。
只需取前16个质数就能够表示1..60这些数字了
(其实只要取到58就好了,所以59这个质数不用,因为选59和选1的代价是一样的,而选60还不如选1呢。。。所以实际上是只要表示1..58这些数字
所以dp的状态第二维的大小为2^16
即f[i][j]表示前i个数字,选择的数字占用质因子的情况为j的最小代价。
预处理出来1..60这些数字占用质因子的情况(转成二进制),不预处理会超时。
然后取minf[n][0..(1<<16)-1]
可以加一个choose[n][1<<16]来记录每个决策选择的是哪个数字。方便后序输出。
以及一个pre[n][1<<16]记录上一个决策点
递归输出答案就好
【代码】
#include <bits/stdc++.h>
using namespace std;
const int N = 100;
const int M = 16;
const int INF = 0x3f3f3f3f;
const int d[]= {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53};
int f[N+10][1<<M],pre[N+10][1<<M],choose[N+10][1<<M],n,a[N+10];
int pp[80];
void output_ans(int dep,int i){
    if (dep==0) return;
    int prei = pre[dep][i];
    if (i==prei){
        output_ans(dep-1,i);
        cout<<1<<' ';
    }else{
        int temp = prei^i;
        output_ans(dep-1,prei);
        cout<<choose[dep][i]<<' ';
    }
}
int main() {
	#ifdef LOCAL_DEFINE
	    freopen("rush_in.txt", "r", stdin);
	#endif
	ios::sync_with_stdio(0),cin.tie(0);
	memset(f,INF,sizeof f);
    cin >> n;
    for (int i = 1;i <= n;i++) cin >> a[i];
    f[0][0] = 0;//前0个数字 质数使用情况为
    for (int k = 1;k < 60;k++){
        int kk = 0;
        for (int l = 0;l < M;l++)
            if (k%d[l]==0){
                kk+=(1<<l);
            }
        pp[k] = kk;
    }
    for (int i = 0;i <= n-1;i++)
        for (int j = 0;j < (1<<M);j++)
            if (f[i][j]<INF){
                for (int k = 1;k < 60;k++){
                    int kk = pp[k];
                    if ((kk&j)==0){
                        int jj = kk|j;
                        if (f[i+1][jj]>f[i][j]+abs(k-a[i+1])){
                            f[i+1][jj] = f[i][j]+abs(k-a[i+1]);
                            choose[i+1][jj] = k;
                            pre[i+1][jj] = j;
                        }
                    }
                }
            }
    int mi = INF,statu;
    for (int i = 0;i < (1<<M);i++)
        if (f[n][i]<mi){
            mi = f[n][i];
            statu = i;
        }
    output_ans(n,statu);
	return 0;
}
												
											【【henuacm2016级暑期训练】动态规划专题 M】Little Pony and Harmony Chest的更多相关文章
- 【henuacm2016级暑期训练-动态规划专题 C】Little Girl and Maximum XOR
		
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 考虑r最后的二进制形式为 1xxxxx 那么我们肯定想让第一个最高位的1保留. 因此我们选取的另外一个数字 一定是 0xxxxx的形 ...
 - 【henuacm2016级暑期训练-动态规划专题  B】Coloring Trees
		
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] f[i][j][k]前i个位置,第i个位置放j这个颜色,然后形成了k个联通块的最小花费 分第i个位置有没有已经放颜色两种情况考虑. ...
 - 【 henuacm2016级暑期训练-动态规划专题 A 】Cards
		
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 很显然只要维护B,R,G的数量就好了. 可以很容易想到一个dfs(int a,int b,int c) 然后如果a+b+c==1,那 ...
 - 【 【henuacm2016级暑期训练】动态规划专题 P】Animals
		
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 第i只动物如果饲养它的话. 代价是固定的就是(n-i+1)a[i] 所以相当于给你n个物品,每个物品的重量为(n-i+1)a[i], ...
 - 【【henuacm2016级暑期训练】动态规划专题 O】Robot Rapping Results Report
		
[链接] 我是链接,点我呀:) [题意] 让你确定一个最小的k 使得1..k这些比赛的结果能够推导出所有人之间的实力大小 [题解] 如果关系越多.那么就越能确定所有人之间的大小关系. (多一点也能唯一 ...
 - 【【henuacm2016级暑期训练】动态规划专题 N】Valid Sets
		
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 给你一棵树. 让你统计其中子树T的数量. 这个子树T要满足最大值和最小值之差小于等于d 树形DP 可以枚举点root为子树的根. 统 ...
 - 【【henuacm2016级暑期训练】动态规划专题 L】Civilization
		
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 给一个森林. 就是由很多棵树组成.. 然后会询问你其中一棵树的最长链. 初始状态的最长链可以用两遍dfs分别找最长路得到. 然后要求 ...
 - 【 【henuacm2016级暑期训练】动态规划专题 K】 Really Big Numbers
		
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 会发现如果x是reallynumber那么x+1也会是reallynumber.... (个位数+1,各位数的和+1了但是整个数也+ ...
 - 【【henuacm2016级暑期训练】动态规划专题 J】Red-Green Towers
		
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 显然最多1000行的样子. 从上到小做dp 设f[i][j]为前i行,使用了j个红色方块的方案数. f[1][r] = 1;如果r& ...
 
随机推荐
- 【codeforces 805C】Find Amir
			
[题目链接]:http://codeforces.com/contest/805/problem/C [题意] 你能从任意一个位置i到达任意一个位置j; 花费为(i+j)%(n+1); 问你从任意一个 ...
 - Mysql学习总结(36)——Mysql查询优化
			
从事前端开发的都知道,页面显示的数据一定要及时的呈现,否则会影响用户体现.那么导致页面加载数据慢或者显示滞后的原因又是什么呢? 拿自己之前做项目经历给大家讲讲吧,之前做后台,当时的项目实时性都非常高, ...
 - rails Installer之后的调整rails.bat等文件
			
rails Installer之后的调整rails.bat文件 出现系统找不到指定路径 学习了:http://www.jianshu.com/p/065355a731ee 修改rails.bat为 @ ...
 - Java关键字整理之一
			
变量.函数.类的前面都可能会用到关键字,最常见的 private.public.protected.default 这四个修饰符的访问权限如下表: -------------------------- ...
 - cocos2dx项目创建
			
射击类游戏文档 作者:浙江传媒学院 新媒体 张勇 1>编译环境 首先我们先去cocos2dx官网上下载cocos2dx最新版本号 http://www.cocos2d-x.org/ 我下载的 ...
 - lpad&rpad
			
lpad( string, padded_length, [ pad_string ] ) string: 准备被填充的字符串 padded_length: 填充之后的字符串长度 pad_string ...
 - iOS CoreImage图片处理动态渲染(滤镜)
			
// // ViewController.m // CoreImageOfDong // // Created by Dong on 15/6/30. // Copyright (c) 201 ...
 - intellij idea 运行jedis
			
到这里下载 http://mvnrepository.com/ jar包! 将jar包放入项目目录中,并引入! 引入包到项目中!创建对象! package com.company; import re ...
 - mysqli简介
			
mysqli简介 PHP MySQLi 简介 PHP MySQLi = PHP MySQL Improved! MySQLi 函数允许您访问 MySQL 数据库服务器. 注释:MySQLi 扩展被设计 ...
 - Oracle 数据库勒索病毒 RushQL 处理办法
			
处理办法来自Oracle 官方: https://blogs.oracle.com/cnsupport_news/%E5%AF%B9%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A% ...