状压DP之LGTB 与序列
2024-09-07 18:07:05
题目
思路
- 这道题竟然是状压DP,本人以为是数论,看都没看就去打下一题的暴力了,哭
\(A_i\)<=30,所以我们只需要考虑1~58个数,再往后选的话还不如选1更优,注意,1是可以重复选取的,因为题目中有一句话
所以我们所枚举的因子只能包括1~58之间的质因子,而且每个质因子只能选一次,所以选完质因子之后,如果还有剩余的数,就用1填补,而1~58之间的质因子只有16个!!!我们对其进行状压。 - f[i][j]代表处理到第i位j状态下的最优解
- 预处理1~58之间的每一个数的因子,用state数组存放,方便处理,
\(f[0][0]=0\),显然在一个数都不处理的情况下,所得价值为0; - dp过程和一般状压dp过程差不多,
i枚举处理到的位数(min(16,n))-->16个质因子都选完不重复,最大为16
S枚举前状态
k枚举要选入的数
判断合法性,!(S&state[k])为合法,显然,如果前一状态已经包含了k的质因子,不合法,
然后进行转移--->f[i][S|state[k]]=min(f[i][S|state[k]],f[i-1][S]+abs(k-a[i]));
对当前状态和上一状态加上当前数的贡献取最小值
- 求转移到的状态(min(16,n))的最小值,可能转移完,也可能没有,如果转移完,直接输出就ok了,如果没有,剩下的用1填补,这就涉及到一开始数组排序方式的问题,如果从小到大,最后没有解决的几个值贡献会很大,所以应该从大到小,先解决大块头
附上蒟蒻代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=1<<20+1;
int prime[] = {0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53};
int f[18][maxn];
int n,a[105];
int state[maxn];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
sort(a+1,a+1+n);
reverse(a+1,a+1+n);
for(int i=1;i<=58;i++){
for(int j=1;j<=16;j++){
if(i<prime[j])break;
else if(i%prime[j]==0){
state[i]|=(1<<(j-1));
}
}
}
int lim=1<<16;
int ans=0x7f7f7f7f;
memset(f,0x3f,sizeof(f));
f[0][0]=0;
for(int i=1;i<=min(16,n);i++){
for(int S=0;S<lim;S++){
for(int k=1;k<=58;k++){
if(!(S&state[k])){
f[i][S|state[k]]=min(f[i][S|state[k]],f[i-1][S]+abs(k-a[i]));
}
}
}
}
for(int S=0;S<lim;S++){
ans=min(ans,f[min(16,n)][S]);
}
if(n>16){
for(int i=17;i<=n;i++)
ans+=abs(a[i]-1);
}
printf("%d\n",ans);
}
推荐状压DP题单(个人觉得比较好的题目,大佬手下留情)
和本题有关:[NOI2015]寿司晚宴
其他:
P1433 吃奶酪
[USACO06NOV]Corn Fields G
[SCOI2005]互不侵犯
[AHOI2009]中国象棋
[SDOI2009]学校食堂
[SDOI2009]Bill的挑战
[NOI2001]炮兵阵地
P2831 愤怒的小鸟
P2915 [USACO08NOV]Mixed Up Cows G
P3052 [USACO12MAR]Cows in a Skyscraper G
P3226 [HNOI2012]集合选数
P4163 [SCOI2007]排列
最新文章
- 树莓派 基于Web的温度计
- [LeetCode] Generalized Abbreviation 通用简写
- LVS原理详解
- ORACLE中的LTRIM、RTRIM和TRIM
- 攻城狮在路上(陆)-- 配置hadoop本地windows运行MapReduce程序环境
- linux基础-第十一单元 系统监控
- 解决vista和win7在windows服务中交互桌面权限问题:穿透Session 0 隔离
- altera soc体验之旅 FPGA与ARM的窃窃私语
- 【转】Android Intent Action 大全
- windows server 2008系统VPN服务配置
- UPX3.03+UpolyX.5 Shell v1.0 汉化绿色版
- PHPCMS V9 为今天或几天前文章加new
- vue-cli 3.0 axios 跨域请求代理配置及生产环境 baseUrl 配置
- 20180429 xlVBA套打单据自适应列宽
- “The operation cannot be completed because the DbContext has been disposed” exception with lazy load disabled
- VIM 文件编码识别与乱码处理(转载)
- openfire消息发送
- Entity Framework对同一张表配置一对多关系
- GNU风格 ARM汇编语法4
- Xcode 中设置部分文件ARC支持
热门文章
- java实现第五届蓝桥杯等额本金
- golang连接达梦数据库的一个坑
- Python3和Python2中int和long的区别?
- javaCV开发详解之12:视频转apng动态图片实现,支持透明通道,也支持摄像机、桌面屏幕、流媒体等视频源转apng动态图
- nacos部署注意点
- office2016专业增强版激活密匙 (shell激活版)
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(五)
- JVM内存结构详解
- delete语句的基本用法
- ESP8266局域网 路由器下作服务器模式串口透传 arduino uno示例 模板参考2