题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1226

状压dp。

f[i][s][k]表示原顺序中前i-1个人都吃了饭,当前状态为s(i及i之后的8个点,已吃饭的二进制为1),上一个吃饭的人的相对距离。

因为是对上一个吃饭的人有限制,可以让l从0到7跑一遍,并更新当前可以取到的l的界。

  1. #include<cstring>
  2. #include<iostream>
  3. #include<algorithm>
  4. #include<cstdio>
  5. #include<queue>
  6. #include<cmath>
  7. #define rep(i,l,r) for (int i=l;i<=r;i++)
  8. #define down(i,l,r) for (int i=l;i>=r;i--)
  9. #define clr(x,y) memset(x,y,sizeof(x))
  10. #define inf int(1e9)
  11. #define ll long long
  12. #define maxn 1005
  13. #define eps 1e-5
  14. #define mm 2147483648
  15. #define low(x) (x&(-x))
  16. #define f(x,y,z) g[x][y][z+8]
  17. using namespace std;
  18. int g[maxn][][],bin[],b[maxn],t[maxn];
  19. int T,n,r;
  20. int read(){
  21. int x=,f=; char ch=getchar();
  22. while (!isdigit(ch)){if (ch=='-') f=-; ch=getchar();}
  23. while (isdigit(ch)){x=x*+ch-''; ch=getchar();}
  24. return x*f;
  25. }
  26. int cal(int x,int y){
  27. if (x==) return ;
  28. return (t[x]^t[y]);
  29. }
  30. int main(){
  31. // freopen("in.txt","r",stdin);
  32. T=read();
  33. bin[]=; rep(i,,) bin[i]=bin[i-]*;
  34. while (T--){
  35. n=read();
  36. rep(i,,n) t[i]=read(),b[i]=read();
  37. rep(i,,n+) rep(j,,) rep(k,-,) f(i,j,k)=inf;
  38. f(,,-)=;
  39. rep(i,,n) rep(j,,bin[]-) rep(k,-,) if (f(i,j,k)<inf){
  40. if (j&) {f(i+,j>>,k-)=min(f(i+,j>>,k-),f(i,j,k)); continue;}
  41. int r=inf;
  42. rep(l,,) if ((bin[l]&j)==){
  43. if (i+l>r) break;
  44. r=min(r,i+l+b[i+l]);
  45. f(i,j+bin[l],l)=min(f(i,j+bin[l],l),f(i,j,k)+cal(i+k,i+l));
  46. }
  47. }
  48. int ans=inf;
  49. rep(k,-,-) ans=min(ans,f(n+,,k));
  50. printf("%d\n",ans);
  51. }
  52. return ;
  53. }

BZOJ1226: [SDOI2009]学校食堂Dining的更多相关文章

  1. BZOJ1226 [SDOI2009]学校食堂Dining 【状压dp】

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

  2. bzoj千题计划286:bzoj1226: [SDOI2009]学校食堂Dining

    http://www.lydsy.com/JudgeOnline/problem.php?id=1226 关键点:一个人只能忍受 ‘紧跟’ 在他 后面的b个人比他先打到饭 dp[i][j][k] 前i ...

  3. 【BZOJ1226】[SDOI2009]学校食堂Dining 状压DP

    [BZOJ1226][SDOI2009]学校食堂Dining Description 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满 ...

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

    1226: [SDOI2009]学校食堂Dining Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 730  Solved: 446[Submit][ ...

  5. 【bzoj1226】【[SDOI2009]学校食堂Dining】状压dp

    (上不了p站我要死了,侵权度娘背锅) Description 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人 ...

  6. 1226: [SDOI2009]学校食堂Dining - BZOJ

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

  7. bzoj 1226 [SDOI2009]学校食堂Dining(状压DP)

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

  8. [SDOI2009]学校食堂Dining

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

  9. P2157 [SDOI2009]学校食堂Dining

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

随机推荐

  1. iOS 获取一个不变的UDID

    原文:iOS7: 如何获取不变的UDID 如何使用KeyChain保存和获取UDID 本文是iOS7系列文章第一篇文章,主要介绍使用KeyChain保存和获取APP数据,解决iOS7上获取不变UDID ...

  2. scala写算法-快排

    快排算法很经典,今天用scala的函数式思维来整理一下并实现: def qsort(list: List[Int]):List[Int]=list match { case Nil=>Nil c ...

  3. ArcGIS API for JavaScript 4.2学习笔记[22] 使用【QueryTask类】进行空间查询 / 弹窗样式

    上一篇写道,使用Query类进行查询featureLayer图层的要素,也简单介绍了QueryTask类的使用. 这一篇博文继续推进,使用Query类和QueryTask类进行空间查询,查询USA的著 ...

  4. 程序员的自我救赎---11.1:RPC接口使用规范

    <前言> (一) Winner2.0 框架基础分析 (二)PLSQL报表系统 (三)SSO单点登录 (四) 短信中心与消息中心 (五)钱包系统 (六)GPU支付中心 (七)权限系统 (八) ...

  5. lumen安装后输出hello world

    1.安装composer,具体请百度 2.composer 切换中国镜像,好处自己体会,命令如下 composer config -g repo.packagist composer https:// ...

  6. date 命令详解

    date - print or set the system date and time Display the current time in the given FORMAT, or set th ...

  7. Python列表list对象方法总结

  8. Oracle学习笔记_08_字符串连接

    附录:参考资料 1.Oracle中字符串连接的实现方法 2.SQL指令— CONCAT(字符串连接函数)

  9. 中文代码示例之Angular入门教程尝试

    原址: https://zhuanlan.zhihu.com/p/30853705 原文: 中文代码示例教程之Angular尝试 为了检验中文命名在Angular中的支持程度, 把Angular官方入 ...

  10. 判断python对象是否可调用的三种方式及其区别

    查找资料,基本上判断python对象是否为可调用的函数,有三种方法 使用内置的callable函数 callable(func) 用于检查对象是否可调用,返回True也可能调用失败,但是返回False ...