bzoj1226: [SDOI2009]学校食堂Dining
这题状压DP。
f[i][j][k]表示前i-1吃了,后面几个吃的人的方案为j,最后吃的是第i+k个人。
然后如果j&1>0可以直接转移到f[i+1][(j>>1)][k]
其他还可以转移到f[i][j+(1<<l)][l]
upd:自己没魔重写一次。。。方程和上面的微有差别,但是注意最后吃的和当前的距离可到达maxb*2
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> #define f(a,b,c) zheshibushikeyixiajibadingyiya[a][b][c+8] using namespace std; const int inf=(1<<30);int a[1100],b[1100]; int zheshibushikeyixiajibadingyiya[1100][310][20];//前i-1吃了,剩下吃的人的方案为j,最后吃的是第i+k个人 int cal(int x,int y) {if(x==0)return 0;return a[x]^a[y]; } int main() {int T;scanf("%d",&T);while(T--){int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d%d",&a[i],&b[i]), b[i]=min(b[i],n-i);for(int i=1;i<=n+1;i++)for(int j=0;j<=255;j++)for(int k=-8;k<=7;k++)f(i,j,k)=inf;f(1,0,-1)=0;for(int i=1;i<=n;i++)for(int j=0;j<=255;j++)for(int k=-8;k<=7;k++)if(f(i,j,k)<inf){if((j&1)>0)f(i+1,(j>>1),k-1)=min(f(i+1,(j>>1),k-1),f(i,j,k));else{int r=inf;for(int l=0;l<=7;l++){int bl=(1<<l);if((j&bl)==0){if(l+i>r)break;r=min(r,l+i+b[i+l]);f(i,j+bl,l)=min(f(i,j+bl,l),f(i,j,k)+cal(i+k,i+l));}}}}int ans=inf;for(int k=-8;k<=-1;k++)ans=min(ans,f(n+1,0,k));printf("%d\n",ans);}return 0; }
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std;int a[1100],b[1100]; int cost(int x,int y){return x==0?0:(a[x]|a[y])-(a[x]&a[y]);}int f[1100][310][20];//zt前往后高位到低位 int main() {freopen("a.in","r",stdin);freopen("a.out","w",stdout);int T;scanf("%d",&T);while(T--){int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d%d",&a[i],&b[i]),b[i]=i+b[i];int li=(1<<8)-1;memset(f,63,sizeof(f));f[0][li][0]=0;for(int i=0;i<=n;i++)for(int zt=0;zt<=li;zt++){bool bk=false;//让i+1先吃会不会发火 if(i==n)bk=true;elsefor(int k=0;k<8;k++)if(i-k>0 && !(zt&(1<<k)) )if(b[i-k]<i+1){bk=true;break;}//....check....if(i==3&&zt==249){int t;t++;}if(!bk){for(int k=0;k<16;k++)if(f[i][zt][k]!=f[n+3][0][0]){int tzt=(zt<<1)-(li+1);f[i+1][tzt|1][0]=min(f[i+1][tzt|1][0],f[i][zt][k]+cost(i-k,i+1));f[i+1][tzt][k+1]=min(f[i+1][tzt][k+1],f[i][zt][k]);}}//............ for(int k=0;k<16;k++) if(f[i][zt][k]!=f[n+3][0][0])for(int u=0;u<8;u++) if(i-u>0 && !(zt&(1<<u)) )f[i][zt|(1<<u)][u]=min(f[i][zt|(1<<u)][u],f[i][zt][k]+cost(i-k,i-u));//............ }int ans=(1<<30);for(int i=0;i<8;i++)ans=min(ans,f[n][li][i]);printf("%d\n",ans);}return 0; }
转载于:https://www.cnblogs.com/AKCqhzdy/p/8682576.html
bzoj1226: [SDOI2009]学校食堂Dining相关推荐
- [SDOI2009]学校食堂Dining
Description 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以 ...
- [SDOI2009]学校食堂Dining 洛谷p2157
题目描述 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以用一个非负整数 ...
- [SDOI2009]学校食堂Dining(洛谷2157)
标签:状压DP,bitset位运算 题目描述 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同 ...
- BZOJ 1226 [SDOI2009] 学校食堂Dining
Description 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以 ...
- BZOJ1226 SDOI2009学校食堂(状压dp)
由于Bi<=7,考虑状压. 如果考虑前i个位置的话,状态里需要压入前7个人后7个人,显然是跑不动的. 那么改成考虑前i个人.于是设f[i][j][k]表示前i个人都已吃完饭,i+1后面7个人的吃 ...
- BZOJ 1226: [SDOI2009]学校食堂Dining [DP 状压]
题意: $n$个人排队打饭,第$i$个人口味$a_i$,能容忍最多身后第$b_i$个人先打饭. 先后两人$i,j$做饭时间为$a_i & a_j - a_i | a_j$ 求最少时间 一开始想 ...
- 【BZOJ1226/SDOI2009】学校食堂Dining
1226: [SDOI2009]学校食堂Dining Time Limit: 10 Sec Memory Limit: 259 MB ...
- [bzoj1226]学校食堂Dining
[bzoj1226]学校食堂Dining 状压dp,注意记上一个人的时候要记到负数(当前这个人之前) 代码 #include<bits/stdc++.h> using namespace ...
- P2157 [SDOI2009]学校食堂
P2157 [SDOI2009]学校食堂 题意: 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定 ...
- [SDOI2009]学校食堂
前言:经过AC这道题的过程,让我明白了一点,不要过于相信您的同伴(因为他会让您的代码wa一天还不清楚为什么).---上述观点均由StarTrek大佬背锅 题目描述 原题链接:[SDOI2009]学校食 ...
最新文章
- travis ci_如何使用Travis CI和GitHub进行Web开发工作流程
- 一个奇葩的标志寄存器 flag寄存器
- ngzorro html源码,Angular 中 ngTemplateOutlet 的用法以及ng-zorro源码分析!
- 浅析商业银行“业务连续性管理体系”的构建
- Cache替换算法:LRU与LFU的区别
- 远控免杀专题1---基础篇
- 二维数组求平均值(指针的使用)
- 【BZOJ4543】【POI2014】Hotel加强版(长链剖分)
- jquery append、prepend、before等等
- Task类的简单介绍
- 精通oracle能干嘛,五分鍾精通Oracle表空間
- H3C 路由器 与 CISCO 路由器在配置上的差别
- webService的使用-----Eclipse
- 楚留香ai识别人脸_【专利解密】商汤科技:AI加持人脸识别
- 中国电信封锁用户80系列端口及应对办法
- 概率论基础(2)条件概率、全概率公式和贝叶斯公式
- 多元相关性分析_NAR:宏基因组网络分析工具MetagenoNets
- 5.网络基础-NAT技术
- Eclipse+ GNU ARM Eclipse Plug-in+ Sourcery G++ Lite Edition for ARM+OPENCD+Jlink的开源开发环境。
- Elasticsearch:在搜索引擎中如何实现完全匹配(内容精确匹配)查询
热门文章
- go - 发布订阅模型
- 小程序支付完整过程。足够详细!
- stc和sac_短期成本曲线
- 分布式系统原理_分布式系统架构设计 第19式 分布式系统八卦思维模型
- [渝粤教育] 武汉理工大学 模拟电子技术基础 参考 资料
- 【渝粤教育】国家开放大学2018年秋季 0716-21T工程建设法规 参考试题
- 【渝粤教育】国家开放大学2018年秋季 0056-22T知识产权法 参考试题
- 【渝粤教育】电大中专学前儿童社会教育 (11)作业 题库
- 遍历目录中的所有文件和目录,并生成全路径
- bit, byte, KB, GB, TB, PB, EB, ZB, YB, BB, NB, DB, CB, XB