Jzoj5441【NOIP2017提高A组冲刺11.1】序列
来源:互联网 发布:祛痘消炎的药膏知乎 编辑:程序博客网 时间:2024/05/30 02:25
给定一个1~n的排列x,每次你可以将x1~xi翻转。你需要求出将序列变为升序的最小操作次数。有多组数据。
此题十分不友善
对于多年没有打过搜索的蒟蒻更是如此
(强行)假定这个题数据范围是在坑人(因为我以前真的见过有人二分图匹配的题正解是状压DP的)
开始寻找多项式算法。。。。。
发现各种贪心都不行。。。。。
实在不行开始写暴力,最后挂掉0分
说说正解:迭代加深+剪枝
我们考虑两个东西,深度上限:2n-2 这个非常显然(其实还有一种说法是上界为n但是没有人证明)
估价函数f(S),表示S到结果至少需要多少步
我们令 f(S)=Σ[abs(S[i]-S[i+1])>1]+已用的步数和步数上限做比较如果大于直接退出
实现f非常简单,我们考虑为什么这样是对的
从各种贪心和样例来看,我们发现若干个连续的数字在最优解中肯定不会被破坏(误,其实我也不知道为什么)
引用题解:
“
我们发现每次翻转只会改变一对相邻数对,因此对于一个状态求出相差>1 的相邻数对的数量,剩余步数一定大于这个值。加上这个剪枝就能通过本题。
”
假装这个是显然的,我们就可以迭代加深了
700ms+,十分菜
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int a[50],b[50],n,m;bool dfs(int p,int d){if(d+p>m) return 0;for(int i=1;i<=n;++i) if(a[i]!=i) goto next;return 1; next:for(int q,i=2;i<=n;++i){q=d+(i<n&&abs(a[i]-a[i+1])==1)-(i<n&&abs(a[1]-a[i+1])==1);reverse(a+1,a+i+1);if(dfs(p+1,q)) return 1;reverse(a+1,a+i+1);}return 0;}int aim(){int p=0;scanf("%d",&n);for(int i=1;i<=n;++i) scanf("%d",a+i);for(int i=1;i<n;++i) if(abs(a[i]-a[i+1])>1) ++p;int l=0,r=n<<1; memcpy(b,a,n+3<<2);for(;l<r;){m=l+r>>1;if(dfs(0,p)) r=m;else l=m+1;memcpy(a,b,n+3<<2);}printf("%d\n",l);}int main(){freopen("sequence.in","r",stdin);freopen("sequence.out","w",stdout);int T;for(scanf("%d",&T);T--;aim());}
阅读全文
0 0
- jzoj5441【NOIP2017提高A组冲刺11.1】序列
- Jzoj5441【NOIP2017提高A组冲刺11.1】序列
- JZOJ5441. 【NOIP2017提高A组冲刺11.1】序列
- JZOJ5441. 【NOIP2017提高A组冲刺11.1】序列 启发式搜索+迭代深搜
- JZOJ 5441. 【NOIP2017提高A组冲刺11.1】序列
- 【JZOJ 5441】【NOIP2017提高A组冲刺11.1】序列
- JZOJ 5441. 【NOIP2017提高A组冲刺11.1】序列
- 【NOIP2017提高A组冲刺11.1】总结
- 【NOIP2017提高A组冲刺11.1】荒诞
- JZOJ 5440. 【NOIP2017提高A组冲刺11.1】背包
- Jzoj5440 【NOIP2017提高A组冲刺11.1】背包
- 【JZOJ5442】【NOIP2017提高A组冲刺11.1】荒诞[状压dp]
- 【JZOJ 5442】【NOIP2017提高A组冲刺11.1】荒诞
- JZOJ5442【NOIP2017提高A组冲刺11.1】荒诞 三进制状压+欧拉序
- JZOJ 5442. 【NOIP2017提高A组冲刺11.1】荒诞
- JZOJ5440. 【NOIP2017提高A组冲刺11.1】背包
- JZOJ5442. 【NOIP2017提高A组冲刺11.1】荒诞
- JZOJ 5440. 【NOIP2017提高A组冲刺11.1】背包
- NOIP 2005 Senior 3
- Android语音录制和播放
- ubuntu16.04如何把菜单栏放到下面
- java可变参数
- Spring Boot中的缓存支持(一)注解配置与EhCache使用
- Jzoj5441【NOIP2017提高A组冲刺11.1】序列
- Character类,Integer类
- 指针的一个重要用途
- 解决 Package:linux-image-4.10.0-38-generic 软件包系统损坏的问题
- C#算法—递归详解
- 浙江大学微积分“老糊涂”讲课,“小糊涂”热烈捧场
- Blockly之工具Block模块的加入流程
- 解决clion2016.3不能支持搜狗输入法的问题
- html表格