10.16 多校联测
T1 毛一琛
考虑折半搜索,每个数的系数只能是-1,0,1之中的一个,因此可以先通过的搜索分别搜索出两边每个状态的和以及数字的选择情况。
然后将后一半的状态按照和排序,枚举前一半的每一个选择情况的状态,将该选择情况下所有状态按和排序,然后通过双指针求出所有合法状态。
1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 5 int n,mid,ans,a[30],num,tmp[1<<11]; 6 int tot=1,pre[60010],son[60010],now[1<<11]; 7 bool b[1<<21]; 8 9 int cnt; 10 struct Node{int sum,set;}f[60010]; 11 12 bool cmp(Node a,Node b){return a.sum<b.sum;} 13 14 void DFS1(int dep,int sum,int set){ 15 if(dep==mid+1){ 16 tot++;pre[tot]=now[set]; 17 now[set]=tot;son[tot]=sum; 18 } 19 else{ 20 DFS1(dep+1,sum,set); 21 DFS1(dep+1,sum+a[dep],set|(1<<(dep-1))); 22 DFS1(dep+1,sum-a[dep],set|(1<<(dep-1))); 23 } 24 } 25 26 void DFS2(int dep,int sum,int set){ 27 if(dep==n+1){ 28 ++cnt; 29 f[cnt].sum=sum;f[cnt].set=set; 30 } 31 else{ 32 DFS2(dep+1,sum,set); 33 DFS2(dep+1,sum+a[dep],set|(1<<(dep-1))); 34 DFS2(dep+1,sum-a[dep],set|(1<<(dep-1))); 35 } 36 } 37 38 int main(){ 39 scanf("%d",&n);mid=n/2; 40 for(int i=1;i<=n;i++)scanf("%d",&a[i]); 41 DFS1(1,0,0);DFS2(mid+1,0,0); 42 sort(f+1,f+cnt+1,cmp); 43 for(int i=0;i<=(1<<mid)-1;i++){ 44 num=0; 45 for(int p=now[i];p;p=pre[p]) 46 tmp[++num]=son[p]; 47 sort(tmp+1,tmp+num+1); 48 for(int j=1,k=1;j<=cnt;j++){ 49 while(k<=num&&tmp[k]<f[j].sum) 50 k++; 51 if(k==num+1)break; 52 if(tmp[k]==f[j].sum) 53 b[i|f[j].set]=1; 54 } 55 } 56 for(int i=1;i<=(1<<n)-1;i++) 57 if(b[i])ans++; 58 printf("%d\n",ans); 59 return 0; 60 }
T2 毛二琛
考虑排列p中的每个数怎样才能被移动到该到的地方。 问题转化为一个大小为n-1的排列,某些地方限定了相邻两数的大小关系。 直接DP即可,fi表示前i个数,第i个数在前i个数中是第j小的。前缀和优化可以做到O(n^2)
T3 毛三琛
暴力枚举x然后二分最大重量,复杂度为O(nPlogn)。
考虑对x枚举的顺序随机一下,这样枚举到一个x时候,可以先去check一下是否比目前的最优解要优,如果是,那么再去二分,否则直接continue。 由于一个随机排列中比前面所有数都大的数的数量期望为log,所以复杂度为O(nP+nlognlogP)。
我不会随机算法,考场的时候只拿了暴力分。。哭晕
转载于:https://www.cnblogs.com/olm2598827139/p/9800867.html
10.16 多校联测相关推荐
- 2017.10.26 四校联测D1
题目比以前的题不知道高明到哪里去了,虽然std有错+数据有问题 T1 地精部落原题 #include<iostream> #include<cstdio> using name ...
- Interview:算法岗位面试—10.16下午—上海某公司算法岗位(偏图像算法,国内顶端医疗行业)技术面试之一点技术都没问
Interview:算法岗位面试-10.16下午-上海某公司算法岗位(偏图像算法,国内顶端医疗行业)技术面试之一点技术都没问 反思:时间把控,应该更好一点,讲解内容,应该更全面一点,最重要的是,讲解的 ...
- 杂记2017.10.16
杂记2017.10.16 ---------------- 2017.4.11 1,pivot是UI的图形中心.0.5,0.5表示该UI的原点在其图形正中 0,0表示该UI的原点在其图形左上角. 2, ...
- ubuntu安装有道云笔记_Ubuntu 安装Node 10.16 跑 Nodeppt 加Hexo博客再来个为知笔记私有云...
几个月前偶然看到NodePPT的霸气标语 U work so hard, but 干不过 write PPTs 当时觉得挺好玩的,后来在自己的Windows笔记本上安装了,效果也确实不错,但是在Ubu ...
- Java黑皮书课后题第10章:*10.16(被2或3整除)找出所有被2或3整除的有50个十进制位数的前10个数字
10.16(被2或3整除)找出所有被2或3整除的有50个十进制位数的前10个数字 法一 破题 代码 运行结果 法二 破题 代码 运行结果 法一 破题 本题通过基本数据类型无解(求不出来,不是没有解) ...
- 10.15 iptables filter表小案例10.16/10.17/10.18 iptables nat表应用
2019独角兽企业重金招聘Python工程师标准>>> 10.15 iptables filter表小案例 iptables 命令.语法总结 iptables-nvL //查看ipt ...
- 2,8,10,16进制转换
先上个例子,方便以后复习,例子看不明白,说明算法已经忘了,再看详细分解 2->8 (1000)2 = 分解为001.000 左边=0*2^2+0*2^1+1*2^0=1 右边=0*2^2+0*2 ...
- mysql 39 t.id 39_ERROR 2003 (HY000): Can#39;t connect to MySQL server on #39;10.16.115.101#39; (1...
ubuntu安装之后mysql,使用apt-get安装命令,默认为同意只本地访问 root@idata1:~/software# mysql -uroot -p123456 -h10.16.115.1 ...
- https 加端口_Ubuntu 安装Node 10.16 跑 Nodeppt 加Hexo博客再来个为知笔记私有云
几个月前偶然看到NodePPT的霸气标语 U work so hard, but 干不过 write PPTs 当时觉得挺好玩的,后来在自己的Windows笔记本上安装了,效果也确实不错,但是在Ubu ...
最新文章
- java foreach order_Java 8流中的forEach vs forEachOrdered
- ASP.NETCore学习记录(一)
- 【Python-ML】SKlearn库L1正则化特征选择
- 强化学习note2——value iteration和policy iteration的区别,MC和TD的区别
- 判断访问接口的设备是安卓还是ios
- python 学堂在线_最新网课答案2020学堂在线Python 交互式程序设计导论
- 负债人有尊严吗?我觉得真的没有
- 最全面的Fiddler 4教程讲解(界面)
- Kettle下载资源
- Odoo15企业邮箱配置与实现手机端回复亦可自动挂单
- 油猴超神好用脚本推荐
- 服务器系统2016开始菜单,大法将致:将Windows Server 2016打造成个人办公系统,WIN2016打造成超级WIN10,WIN2016优化设...
- java如何批量生成二维码,并返回成压缩包形式?
- 吴恩达深度学习课程值不值得学?四晚学完的高手给你建议
- requests.exceptions.ConnectionError:HTTPSConnectionPool(host
- Efficient Use Of Tmux
- 双卡手机发送短信 - 坑爹的双卡双待
- esp32和MPU6500 I2C通信
- 华为交换机路由器例行维护(巡检)方法参考
- RBA验厂辅导,RBA认证7.0供应商行为准则中文版详细内容
热门文章
- rds基于什么开发_元王RDS--让H公司的10多年的设计经验重获新生!
- angularjsl路由_AngularJS路由和模板
- Linux 如何取进程运行时间,linux -- 获取进程执行时间
- vue搜索好友_Vue实现类似通讯录功能(中)
- python底层网络交互模块_网络和并发编程(面试题)
- html调出手机系统设置,手机怎么打开路由器设置界面?
- windows 从端口找应用
- JSP页面中调用Spring Bean
- 桌面图标计算机的意义,关于电脑桌面图标的3个古老问题,答对一个都是高手,你会几个?...
- linux终端xwindow,如何从命令行重新启动X Window Server?