CF1342F Make It Ascending(状压+求过程-求结果)

CF1342F Make It Ascending

给予一个包含 \(n\) 个元素的数组 \(a\),你可以进行以下操作:

  • 选择两个不同的元素 \(a_i,a_j\)(\(1 \le i,j \le n\)\(i \ne j\))
  • \(a_j\) 的值加上 \(a_i\),并移除 \(a\) 中的第 \(i\) 个元素。

求使 \(a\) 数组严格递增(对于 \(1 \le i < n\),有 \(a_i<a_{i+1}\))所需的最少操作数(可以为 \(0\))。

多组数据,\(n^2\times 2^n\times T\le 10^6,n\le 15,a_i\le 10^6\)

\(\bigstar\texttt{Hint}\):求操作后递增比较困难,那么求最终序列

发现最少操作数就是最终序列最大长度,而且根据 \(n\) 的范围合理推出状态:

\(dp_{i,s,p}\) 完成最终序列前 \(i\) 个数的拼接,用了原来位置上 \(s\) 集合中的数,且新合并的第 \(i\) 个数在原本序列上的位置为 \(p\),第 \(i\) 个数的最小值。

转移要求新和成的 \(i\) 与上一次和成的 \(i-1\) 满足 \(p_i>p_{i-1}\)\(i\) 的权值大于 \(i-1\) 的权值。

这样状态数 \(\mathcal{O(n^22^n)}\),枚举转移子集加上去后是 \(\mathcal{O(n^23^n)}\)

输出方案?记录上一个转移过来的点即可。

#define Maxn 17
#define Maxpown 32775
int n,All,_i,_p,_s,Left,opt; // record best answer
int a[Maxn],num[Maxn],tx[Maxn],ty[Maxn];
int dp[Maxn][Maxn][Maxpown],sum[Maxpown];
pa fro[Maxn][Maxn][Maxpown];
// i,p,s 完成 i 个,base 在 p,用了 s 
inline void Delete(int x)
{for(int i=x+1;i<=Left;i++) num[i-1]=num[i];Left--;
}
int main()
{int T=rd();while(T--){Left=n=rd(),All=1<<n,opt=0,_i=_p=_s=0;for(int i=1;i<=n;i++) a[i]=rd(),num[i]=i;for(int i=0;i<All;i++) sum[i]=0;for(int i=0;i<All;i++) for(int j=1;j<=n;j++) if((i>>(j-1))&1) sum[i]+=a[j];for(int i=0;i<=n;i++) for(int p=0;p<=n;p++) for(int s=0;s<=All;s++)dp[i][p][s]=inf,fro[i][p][s]=pa(0,0);dp[0][0][0]=0;// 推表 for(int i=0;i<n;i++) for(int p=0;p<n;p++)for(int s=0;s<All;s++) if(dp[i][p][s]!=inf)for(int q=p+1;q<=n;q++) if(!((s>>(q-1))&1)){int st=(All-1)^s^(1<<(q-1));for(int t=st,tt;t;t=(t-1)&st){tt=t|(1<<(q-1));if(sum[tt]>dp[i][p][s] && dp[i+1][q][s|tt]>sum[tt])dp[i+1][q][s|tt]=sum[tt],fro[i+1][q][s|tt]=pa(p,s);}int t=0,tt;tt=t|(1<<(q-1));if(sum[tt]>dp[i][p][s] && dp[i+1][q][s|tt]>sum[tt])dp[i+1][q][s|tt]=sum[tt],fro[i+1][q][s|tt]=pa(p,s);}for(int i=n;i>=1;i--){bool exist=false;for(int p=1;p<=n;p++) if(dp[i][p][All-1]!=inf) exist=true,_i=i,_p=p;if(exist) break;}_s=All-1;for(int i=_i,t;i;i--){pa tmp=fro[i][_p][_s];t=_s^tmp.se,assert((t&_s)==t);for(int j=__builtin_popcount(t)-1,tcur,tp;j;j--){tcur=tp=-1;for(int k=1;k<=Left;k++)if(num[k]==_p) tcur=k;else if((t>>(num[k]-1))&1) tp=k;assert(tcur!=-1 && tp!=-1);opt++,tx[opt]=tp,ty[opt]=tcur;Delete(tp);}_p=tmp.fi,_s=tmp.se;}assert(opt==n-_i);printf("%d\n",opt);for(int i=1;i<=opt;i++) printf("%d %d\n",tx[i],ty[i]);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317858.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AT4437-[AGC028C]Min Cost Cycle【结论,堆】

正题 题目链接:https://www.luogu.com.cn/problem/AT4437 题目大意 有nnn个点的一张有向完全图&#xff0c;每个点有两个点权a,ba,ba,b。连接x,yx,yx,y两个点的边权为min{ax,by}min\{a_x,b_y\}min{ax​,by​}&#xff0c;求一条权值和最小的哈密顿回路。 1≤n≤105,1≤a,b≤1…

某银行大型管理系统端到端持续集成和交付实践

背景传统的银行IT系统研发流程从需求提出到产品交付往往具有较长的研发周期&#xff0c;纵观银行当下面临的市场环境&#xff0c;个人信贷消费升级&#xff0c;资管需求旺盛&#xff0c;普惠金融成为国家战略&#xff0c;来自银行同业和互联网金融的压力扑面而来&#xff0c;谁…

排列组合十一个性质公式及证明,错排数公式及证明

文章目录排列数组合数求组合数常用公式定义式递推式杨辉三角组合数常用性质及证明性质一性质二性质三性质四(二项式定理)性质五性质六性质七性质八性质九性质十性质十一错排数排列数 从nnn个物品中不放回地依次选mmm个物品&#xff0c;考虑顺序&#xff0c;有多少种方案&#…

洛谷P3155:叶子的染色(树形dp)

解析 本题的关键是选取哪一个根对答案没有影响 还有一个重要的性质是&#xff1a;根节点必定涂色 这点对每棵子树作为独立的子问题时依然成立 然鹅我完全没有看到上面那俩性质 直接暴力设计dp状态0.、1、2 开始莽 然后&#xff1f;然后就T了啊… 只好开始考虑换根 然后&#x…

P7011-[CERC2013]Escape【堆,启发式合并】

正题 题目链接:https://www.luogu.com.cn/problem/P7011 题目大意 给出nnn个点的一棵树&#xff0c;从一出发&#xff0c;要走到 ttt。初始时权值为000&#xff0c;每个节点有一个权值wiw_iwi​&#xff0c;第一次走过这个节点时会让权值加上该节点的权值&#xff0c;要求全程…

CF1463F Max Correct Set(取小样法+状压 DP)

CF1463F Max Correct Set 要求选出集合 \(U\{1,2,3,\dots,n\}\) 的一个子集 \(S\)&#xff0c;满足&#xff1a;如果 \(a \in S\) 并且 \(b \in S\)&#xff0c;那么 \(|a-b| \not {x}\) 并且 \(|a-b| \not {y}\)。求集合 \(S\) 大小的最大值。 \(1\le n\le 10^9,1\le x,y\le 2…

引入用于 Azure IoT Edge 的 Visual Studio 工具

物联网开发人员&#xff1a;工具和经验引入用于 Azure IoT Edge 的 Visual Studio 工具今天&#xff0c;我们很高兴地发布用于 Visual Studio 2017 的 Azure IoT Edge 工具的预览版。Azure IoT Edge 是一个全托管服务&#xff0c;通过直接在跨平台物联网设备上部署并运行人工智…

P4878 [USACO05DEC]Layout G

P4878 [USACO05DEC]Layout G 题意&#xff1a; 题解&#xff1a; 这个题其实是差分约束的裸题&#xff0c;但是有几个坑要注意 1.题目说了&#xff0c;奶牛按照编号1…N排列&#xff0c;对于ML个输入&#xff0c;A< B ,所以关系是B - A < 10,而不是A - B <10,我一开…

【学习笔记】原根 / BSGS / 扩展BSGS证明及模板

文章目录原根BSGS大步小步算法扩展BSGS原根 如果两个整数a,ba,ba,b互质&#xff0c;则有aϕ(b)%b1a^{\phi(b)}\%b1aϕ(b)%b1 定义模bbb意义下的aaa的阶为使ad%b1a^d\%b1ad%b1的最小正整数ddd 显然&#xff0c;模bbb的阶d∣ϕ(b)d|\phi(b)d∣ϕ(b) 如果模bbb意义下aaa的阶为…

Loj#3130-「COCI 2018.12」Praktični【线性基】

正题 题目链接:https://loj.ac/p/3130 题目大意 给出nnn个点mmm条边的一张有权无向图&#xff0c;你每次可以选择一个边集异或上一个值&#xff0c;要求最少次数使得所有简单环异或和都为000。 1≤n,m≤1051\leq n,m\leq 10^51≤n,m≤105 解题思路 先找一棵生成树&#xff0…

洛谷P5664:Emiya 家今天的饭(容斥、dp)

解析 应该是比较入门的容斥了 统计方案用总方案数-某列超过1半的方案数 dp设计的一个trick是只统计差值 代码 #include<bits/stdc.h> using namespace std; #define ll long long const int N2050; const double eps1e-6; const int mod998244353; inline ll read(){l…

[ARC098F] Donation(找性质+点 Kruskal 重构树)

[ARC098F] Donation 给出一个 \(N\) 个点 \(M\) 条边的无向连通图&#xff0c;每个点的标号为 \(1\) 到 \(n\)&#xff0c; 且有两个权值 \(A_i,B_i\)。第 \(i\) 条边连接了点 \(u_i\) 和 \(v_i\)。 最开始时你拥有一定数量的钱&#xff0c;并且可以选择这张图上的任意一个点作…

.Net Core分布式部署中的DataProtection密钥安全性

在.NetCore中默认使用DataProtection来保护数据&#xff0c;例如Cooike等。一般情况下DataProtection生成的密钥会被加密后存储&#xff0c;例如默认的文件存储可以看到使用了Windows DPAPI加密。但是如果更改默认设置例如使用的外部存储如redis则此时密钥默认是不加密的微软说…

P2294 [HNOI2005]狡猾的商人

P2294 [HNOI2005]狡猾的商人 题意&#xff1a; 你需要调查某个商人的账本&#xff0c;给你n个月内&#xff0c;m条账单信息&#xff0c;每条账单信息为x到y月的收入或者支出多少钱&#xff0c;问你根据账单信息判断这个账本是否合理 5 3 1 5 100 3 5 50 1 2 51比如样例&…

洛谷P1852:跳跳棋(LCA,树形结构)

解析 考虑一个三元组(x,y,z)(x,y,z)(x,y,z)&#xff0c;看它能如何跳 要么是yyy往左右跳&#xff0c;左右边界会变大 要么是两边往中间跳&#xff0c;由于最多跨过一个棋子&#xff0c;所以左右边界会变小 当三点等距时&#xff0c;无法往中间跳 于是我们惊喜的发现&#xff1…

scanf(“%s“)真的只开读入字符串大小就可以了吗??

文章目录前言还原过程计算机程序背后的故事总结瞎逼逼前言 艹艹艹艹艹艹&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;老子没想到没想到&#xff0c;靠&#xff01; 本人刚刚在做树链剖分“染色”一题的代码重构&#xff0c;上午打…

P5299-[PKUWC2018]Slay the Spire【dp】

前言 正题 题目链接:https://www.luogu.com.cn/problem/P5299 题目大意 有2n2n2n张牌&#xff0c; nnn张强化牌&#xff0c;每张上有一个正整数x(x>1)x(x>1)x(x>1)&#xff0c;如果使用后之后的每一张攻击牌伤害都会乘上xxx。nnn张攻击牌&#xff0c;每张上有一个正…

CF1152F Neko Rules the Catniverse(状压 DP)

CF1152F Neko Rules the Catniverse 给定参数 \(n,k,m\)&#xff0c;你需要求有多少个大小为 \(k\) 的序列 \(a\) 满足如下三个条件&#xff1a; 任意两个元素其权值不同。对于任意 \(i\) 满足 \(1\le i\le k\) 有 \(1\le a_i\le n\)。对于任意 \(i\) 满足 \(2\le i\le k\) 有 …

asp.net core2.2 多用户验证和授权

asp.net core2.2 用户验证 和授权有很详细和特贴心的介绍&#xff0c;我感兴趣的主要是这两篇&#xff1a;cookie身份验证基于角色的授权我的项目有两类用户&#xff1a;微信公众号用户&#xff0c;用户名为公众号的openid企业微信的用户&#xff0c;用户名为企业微信的userid每…

P1494 [国家集训队]小Z的袜子

P1494 [国家集训队]小Z的袜子 题意&#xff1a; 有一个长度为 n 的序列c[i] 。现在给出 m个询问&#xff0c;每次给出两个数l,r &#xff0c;从编号在 l 到 r 之间的数中随机选出两个不同的数&#xff0c;求两个数相等的概率。 题解&#xff1a; 很明显&#xff0c;莫队算法…