这题状压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相关推荐

  1. [SDOI2009]学校食堂Dining

    Description 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以 ...

  2. [SDOI2009]学校食堂Dining 洛谷p2157

    题目描述 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以用一个非负整数 ...

  3. [SDOI2009]学校食堂Dining(洛谷2157)

    标签:状压DP,bitset位运算 题目描述 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同 ...

  4. BZOJ 1226 [SDOI2009] 学校食堂Dining

    Description 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以 ...

  5. BZOJ1226 SDOI2009学校食堂(状压dp)

    由于Bi<=7,考虑状压. 如果考虑前i个位置的话,状态里需要压入前7个人后7个人,显然是跑不动的. 那么改成考虑前i个人.于是设f[i][j][k]表示前i个人都已吃完饭,i+1后面7个人的吃 ...

  6. BZOJ 1226: [SDOI2009]学校食堂Dining [DP 状压]

    题意: $n$个人排队打饭,第$i$个人口味$a_i$,能容忍最多身后第$b_i$个人先打饭. 先后两人$i,j$做饭时间为$a_i & a_j - a_i | a_j$ 求最少时间 一开始想 ...

  7. 【BZOJ1226/SDOI2009】学校食堂Dining

    1226: [SDOI2009]学校食堂Dining Time Limit: 10 Sec  Memory Limit: 259 MB                                 ...

  8. [bzoj1226]学校食堂Dining

    [bzoj1226]学校食堂Dining 状压dp,注意记上一个人的时候要记到负数(当前这个人之前) 代码 #include<bits/stdc++.h> using namespace ...

  9. P2157 [SDOI2009]学校食堂

    P2157 [SDOI2009]学校食堂 题意: 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定 ...

  10. [SDOI2009]学校食堂

    前言:经过AC这道题的过程,让我明白了一点,不要过于相信您的同伴(因为他会让您的代码wa一天还不清楚为什么).---上述观点均由StarTrek大佬背锅 题目描述 原题链接:[SDOI2009]学校食 ...

最新文章

  1. travis ci_如何使用Travis CI和GitHub进行Web开发工作流程
  2. 一个奇葩的标志寄存器 flag寄存器
  3. ngzorro html源码,Angular 中 ngTemplateOutlet 的用法以及ng-zorro源码分析!
  4. 浅析商业银行“业务连续性管理体系”的构建
  5. Cache替换算法:LRU与LFU的区别
  6. 远控免杀专题1---基础篇
  7. 二维数组求平均值(指针的使用)
  8. 【BZOJ4543】【POI2014】Hotel加强版(长链剖分)
  9. jquery append、prepend、before等等
  10. Task类的简单介绍
  11. 精通oracle能干嘛,五分鍾精通Oracle表空間
  12. H3C 路由器 与 CISCO 路由器在配置上的差别
  13. webService的使用-----Eclipse
  14. 楚留香ai识别人脸_【专利解密】商汤科技:AI加持人脸识别
  15. 中国电信封锁用户80系列端口及应对办法
  16. 概率论基础(2)条件概率、全概率公式和贝叶斯公式
  17. 多元相关性分析_NAR:宏基因组网络分析工具MetagenoNets
  18. 5.网络基础-NAT技术
  19. Eclipse+ GNU ARM Eclipse Plug-in+ Sourcery G++ Lite Edition for ARM+OPENCD+Jlink的开源开发环境。
  20. Elasticsearch:在搜索引擎中如何实现完全匹配(内容精确匹配)查询

热门文章

  1. go - 发布订阅模型
  2. 小程序支付完整过程。足够详细!
  3. stc和sac_短期成本曲线
  4. 分布式系统原理_分布式系统架构设计 第19式 分布式系统八卦思维模型
  5. [渝粤教育] 武汉理工大学 模拟电子技术基础 参考 资料
  6. 【渝粤教育】国家开放大学2018年秋季 0716-21T工程建设法规 参考试题
  7. 【渝粤教育】国家开放大学2018年秋季 0056-22T知识产权法 参考试题
  8. 【渝粤教育】电大中专学前儿童社会教育 (11)作业 题库
  9. 遍历目录中的所有文件和目录,并生成全路径
  10. bit, byte, KB, GB, TB, PB, EB, ZB, YB, BB, NB, DB, CB, XB