Uva5933 队列优化
来源:互联网 发布:考研英语作文模板知乎 编辑:程序博客网 时间:2024/06/14 13:08
这题每次求的时候必须在满足条件的情况中选,明显是队列优化的模型,如果枚举所有情况,tle不解释。
代码:
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<map>#define ll __int64#define eps 1e-10#define maxn 305#define L ((1<<22)+1)using namespace std;int g[33][1000],value[(1<<22)+10],len[(1<<22)+10];int v[33],q[(1<<22)+10];int is[(1<<22)+1][2];void print(int x){ if(x<2) printf("%d",x); else { print(x/2); printf("%d",x%2); }}void init(){ len[0]=0; for(int i=1; i<(1<<22); i++) { for(int j=0; j<22; j++) { if(i&(1<<j)) { value[i]=value[i^(1<<j)]+j+1; len[i]=len[i^(1<<j)]+1; break; } } if(value[i]<=22) g[value[i]][++g[value[i]][0]]=i; }}int main(){ init(); int n,m,tt=1; while(scanf("%d%d",&n,&m)!=EOF) { if(!n&&!m) break; for(int i=1;i<=m;i++) { scanf("%d",&v[i]); } int qs,qe,V; qs=0,qe=1,q[0]=0; int ans=0,limit=(1<<n); for(int i=1;i<=m;i++) { int flag=0; V=v[i]; int size=qe; for(;qs!=size;qs++) { int pre=q[(qs%L)];//循环队列来缩小内存 for(int j=1;j<=g[V][0];j++) { int tmp=g[V][j]; if(tmp>=limit) continue; if((pre&tmp)==0) { int next=(pre|tmp); if(is[next][0]!=tt||is[next][1]!=i)//出现次数可能不止一次,去重 { is[next][0]=tt; is[next][1]=i; q[qe%L]=next; qe++; ans=max(ans,len[next]); } } } } } printf("Game %d: ",tt++); printf("%d\n",ans); } return 0;}
- Uva5933 队列优化
- 队列:二分+读入优化+优化
- dijstra+优先队列优化
- 单调队列优化DP
- 优先队列优化 dijkstra
- 单调队列优化DP
- 单调队列优化专题
- poj1821 单调队列优化
- 队列的优化
- ##单调队列、斜率优化##
- dp单调队列优化
- 单调队列优化LIS
- 单调队列--优化dp
- Dijkstra(优先队列优化)
- Dijkstra优先队列优化
- 单调队列优化dp
- bzoj2442(单调队列优化)
- prim及其:队列优化
- 谨记使用ajax忽视的小错误
- chmod命令之rwx
- 乾为天
- 富士通面试
- 你让工人为你工作7天,回报是一根金条.....
- Uva5933 队列优化
- c语言time与clock区别
- 网络爬虫 学习1
- 配置文件的使用,加密用法
- 【Cocos2d游戏开发之二】CCScene场景切换的特效
- 水雷屯
- 平面最近点对
- asp.net长文章插入指定分页符进行分页
- SHH入门:Spring框架简介