hdu 5798 Stabilization(2016多校第六场1006)
来源:互联网 发布:数据科学家养成手册 编辑:程序博客网 时间:2024/06/14 15:26
我们仔细想想可以发现如果两个相邻的数某个最高位不同的话,就直接影响到下面的所有位,我们社最高位为p,不妨设a[i-1][p]>a[i][p],如果下面有一位j使得a[i-1][j]!=a[i][j],那么我们想如果a[i-1][j]>a[i][j] 如果x[p]和x[j](x的第p和第j为)相同,那么他们同向,也就是a[i-1][j]-a[i][j]对答案有正贡献,同理x[p]与x[j]不同,那a[i-1][j]-a[i][j]对答案有负贡献,所以我们之所以把20*20的所有贡献算出来就行,然后枚举,但是直接枚举是2^20*400所以用dfs优化即可。
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<vector>#include<queue>#include<map>#include<set>using namespace std;typedef long long LL;LL a[2][22][22];typedef pair<int,LL>p1;p1 ans;LL b[22];int x[22];int fa[22];void dfs(int u,int p,int xx,LL all){ if(u==p){ if(ans.second>all){ ans.second=all; ans.first=xx; } else if(ans.second==all){ if(ans.first>xx){ ans.first=xx; } } return; } for(int j=0;j<2;j++){ x[u]=j; LL s; s=b[u]; for(int i=0;i<u;i++){ if(x[i]==x[u]){ s+=a[0][i][u]; } else{ s+=a[1][i][u]; } } dfs(u+1,p,xx+j*fa[u],all+s); }}int in[100005];int main(){ int n,t; for(int i=0;i<=20;i++) fa[i]=1<<i; cin>>t; while(t--){ scanf("%d",&n); memset(b,0,sizeof(b)); memset(a,0,sizeof(a)); for(int i=1;i<=n;i++) scanf("%d",&in[i]); int uo=0; for(int i=2;i<=n;i++){ int f=-1,u1=0; for(int j=19;j>=0;j--){ int x=(in[i-1]>>j)&1; int y=(in[i]>>j)&1; if(x||y) uo=max(uo,j); if(x!=y){ if(f!=-1){ if(x-y!=u1){ a[0][j][f]-=fa[j]; a[1][j][f]+=fa[j]; } else{ a[0][j][f]+=fa[j]; a[1][j][f]-=fa[j]; } } else{ u1=x-y; f=j; b[j]+=fa[j]; } } } } ans=make_pair(100000000,(LL)1<<60); dfs(0,uo+1,0,0); printf("%d %lld\n",ans.first,ans.second); }}
1 0
- hdu 5798 Stabilization(2016多校第六场1006)
- hdu 5798 Stabilization
- HDU 5798 Stabilization(dfs)
- 多校第六场 1006 hdu 5358 First One(枚举)
- 2016多校训练Contest6: 1006 Stabilization hdu5798
- hdu 4662 MU Puzzle 多校第六场
- 2013 多校第六场 hdu 4662 MU Puzzle
- hdu 4662 MU Puzzle 13多校第六场
- hdu 4658 整数划分+五边形定理 多校第六场
- 2013 多校第六场 hdu 4655 Cut Pieces
- 2013 多校第六场 hdu 4665 Unshuffle
- hdu 4925 Apple Tree 2014多校第六场 贪心
- 多校第六场 HDU 4927 JAVA大数类+模拟
- HDU 4930 Fighting the Landlords 多校第六场
- 多校第六场 Apple Tree hdu 4925
- 多校第六场 1003 hdu 5355 Cake(贪心)
- 多校第六场 1008 hdu 5360 Hiking(贪心+STL)
- hdu 5361 2015多校联赛第六场 In Touch
- iOS开发-automaticallyAdjustsScrollViewInsets属性
- Android瀑布流实例
- Maven学习笔记(2) --- 依赖
- Android——ListView布局+适配器(三)
- 教你一波Lucas(卢卡斯)定理在数论解题中的应用
- hdu 5798 Stabilization(2016多校第六场1006)
- HDU 1548 A strange lift (Dijkstra算法)
- Java 基本数据类型
- 如何将文件夹打包成文件,然后将文件格式化成虚拟文件系统,挂载到某个文件夹
- 缓存文件可以放在哪里?它们各自的特点是什么?
- 如何在Spark中记录日志
- 单例多例的选择
- android json解析及简单例子
- spring中Bean的生命周期总结