Wannafly模拟赛3 贝伦卡斯泰露 【折半搜索+hash,状压dp】
来源:互联网 发布:真人快打x没有网络链接 编辑:程序博客网 时间:2024/06/08 16:57
题目:https://www.nowcoder.com/acm/contest/13/B
题意:
给出一个长度为n的数列Ai,问是否能将这个数列分解为两个长度
为n/2的子序列,满足
∙ 两个子序列不互相重叠。
∙ 两个子序列中的数要完全一样,{1, 2} = {1, 2},{1, 2} ≠ {2, 1}。
分析:
刚开始贪心,第2个序列尽量匹配最左边的数,后来想了想不对。
后来dfs爆搜,居然能过QAQ,可能数据不强吧。
有的是折半搜+hash:https://www.nowcoder.com/acm/contest/view-submission?submissionId=18952117
还有用队列正反走一遍的:https://www.nowcoder.com/acm/contest/view-submission?submissionId=18952929
状压:https://www.nowcoder.com/acm/contest/view-submission?submissionId=18948024
爆搜:
#include <iostream>#include <cstdio>#include <cstring>#include <set>#include <map>#include <vector>using namespace std;const int N=40+9;const int INF=0x3f3f3f3f;int n,flag;int q[N],a[N];void dfs(int id,int l1,int l2){ if(l1>n/2||l2>n/2||flag)return; if(id==n){ if(l1==l2)flag=1; return; } if(a[id]==q[l2]) dfs(id+1,l1,l2+1); q[l1]=a[id]; dfs(id+1,l1+1,l2);}int main(){ int T; scanf("%d",&T); while(T--){ scanf("%d",&n); memset(q,0,sizeof(q)); for(int i=0;i<n;i++) scanf("%d",&a[i]); q[0]=a[0]; flag=0; dfs(1,1,0); puts(flag?"Frederica Bernkastel":"Furude Rika"); } return 0;}
阅读全文
0 0
- Wannafly模拟赛3 贝伦卡斯泰露 【折半搜索+hash,状压dp】
- Wannafly模拟赛3 贝伦卡斯泰露(搜索+剪枝)
- Wannafly模拟赛 矩阵 二维矩阵hash
- Wannafly模拟赛 矩阵 [矩阵hash+二分]
- Wannafly模拟赛3
- Wannafly模拟赛 树【思维+Dp】
- Wannafly模拟赛 树(dp)
- Wannafly模拟赛3 题解
- Wannafly模拟赛3 题解
- 牛客网 Wannafly模拟赛 矩阵 二分+hash矩阵
- 牛客网 Wannafly模拟赛 矩阵 二分+hash矩阵
- Wannafly模拟赛3-B 贝伦卡斯泰露(DFS)
- 牛客网 Wannafly模拟赛2 树 dp+思维
- NOIP模拟题 2016.10.29 [DP] [中位数相关] [折半搜索]
- Wannafly模拟赛3 反蝴蝶效应
- Wannafly模拟赛3 生物课程
- 10.9wannafly模拟赛
- Wannafly模拟赛4
- NIO 02 阻塞式和非阻塞式[Socket]
- 如何实现一个线程安全的map?
- 安卓的4种动画
- express获取表单中的文件和其他数据(enctype=multipart/form-data)
- ArcGIS体系介绍
- Wannafly模拟赛3 贝伦卡斯泰露 【折半搜索+hash,状压dp】
- 欢迎使用CSDN-markdown编辑器
- C++与C#互转
- iOS开发之WKWebView怎么加载请求并且传参数
- 将数据写入SD卡
- JAVA常用api — Object详解
- xx.tld标签开发之权限管理标签开发
- 最小距离之和 CODEVS
- java中的四种访问控制修饰符