设f[i][S]表示第i份食物被两个人吃的状态为S是否有可能,枚举f[1][]的情况后检验

f[i][0]=(f[i-1][1]&a[i-1]>=a[i])|(f[i-1][3]&a[i-1]>=2*a[i])

f[i][1]=(f[i-1][1]&2*a[i-1]>=a[i])|(f[i-1][3]&a[i-1]>=a[i])

f[i][2]=(f[i-1][0]&a[i]>=a[i-1])|(f[i-1][2]&2*a[i]>=a[i-1])

f[i][3]=(f[i-1][0]&a[i]>=2*a[i-1])|(f[i-1][2]&a[i]>=a[i-1])

  1. #include<cstdio>
  2. #define N 1000010
  3. int n,i,j,S,a[N],g[N][4],ans[N],c[N];
  4. bool f[N][4];
  5. inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
  6. bool dp(int S){
  7. for(i=1;i<=n;i++)for(j=0;j<4;j++)f[i][j]=0;
  8. f[1][S]=1;
  9. for(i=2;i<=n;i++){
  10. if(f[i-1][1]&a[i-1]>=a[i])f[i][0]=1,g[i][0]=1;
  11. else if(f[i-1][3]&a[i-1]>=2*a[i])f[i][0]=1,g[i][0]=3;
  12. if(f[i-1][1]&2*a[i-1]>=a[i])f[i][1]=1,g[i][1]=1;
  13. else if(f[i-1][3]&a[i-1]>=a[i])f[i][1]=1,g[i][1]=3;
  14. if(f[i-1][0]&a[i]>=a[i-1])f[i][2]=1,g[i][2]=0;
  15. else if(f[i-1][2]&2*a[i]>=a[i-1])f[i][2]=1,g[i][2]=2;
  16. if(f[i-1][0]&a[i]>=2*a[i-1])f[i][3]=1,g[i][3]=0;
  17. else if(f[i-1][2]&a[i]>=a[i-1])f[i][3]=1,g[i][3]=2;
  18. }
  19. for(j=0;j<4;j++)f[0][j]=f[n][j],f[1][j]=0;
  20. i=1;
  21. if(f[i-1][1]&a[i-1]>=a[i])f[i][0]=1,g[i][0]=1;
  22. else if(f[i-1][3]&a[i-1]>=2*a[i])f[i][0]=1,g[i][0]=3;
  23. if(f[i-1][1]&2*a[i-1]>=a[i])f[i][1]=1,g[i][1]=1;
  24. else if(f[i-1][3]&a[i-1]>=a[i])f[i][1]=1,g[i][1]=3;
  25. if(f[i-1][0]&a[i]>=a[i-1])f[i][2]=1,g[i][2]=0;
  26. else if(f[i-1][2]&2*a[i]>=a[i-1])f[i][2]=1,g[i][2]=2;
  27. if(f[i-1][0]&a[i]>=2*a[i-1])f[i][3]=1,g[i][3]=0;
  28. else if(f[i-1][2]&a[i]>=a[i-1])f[i][3]=1,g[i][3]=2;
  29. return f[1][S];
  30. }
  31. int main(){
  32. read(n);
  33. for(i=1;i<=n;i++)read(a[i]);a[0]=a[n];
  34. for(S=0;S<4;S++)if(dp(S))break;
  35. if(S==4)puts("NIE");
  36. else{
  37. ans[1]=S;
  38. for(i=n,j=g[1][S];i>1;j=g[i--][j])ans[i]=j;
  39. if(ans[1]==1||ans[1]==3)c[1]=1;
  40. if(ans[1]==2||ans[1]==3)c[n]=1;
  41. for(i=2;i<=n;i++){
  42. if(ans[i]==1||ans[i]==3)c[i]=i;
  43. if(ans[i]==2||ans[i]==3)c[i-1]=i;
  44. }
  45. for(i=1;i<=n;i++)printf("%d ",c[i]);
  46. }
  47. return 0;
  48. }

  

BZOJ3749 : [POI2015]Łasuchy的更多相关文章

  1. [POI2015]Łasuchy

    [POI2015]Łasuchy 题目大意: 圆桌上摆放着\(n(n\le10^6)\)份食物,围成一圈,第\(i\)份食物所含热量为\(c_i\). 相邻两份食物之间坐着一个人,共有\(n\)个人. ...

  2. BZOJ 3749: [POI2015]Łasuchy【动态规划】

    Description 圆桌上摆放着n份食物,围成一圈,第i份食物所含热量为c[i]. 相邻两份食物之间坐着一个人,共有n个人.每个人有两种选择,吃自己左边或者右边的食物.如果两个人选择了同一份食物, ...

  3. BZOJ 3749: [POI2015]Łasuchy(贪心)

    Orz大佬博客 CODE #include <bits/stdc++.h> using namespace std; typedef long long LL; char cb[1< ...

  4. @bzoj - 3749@ [POI2015] Łasuchy

    目录 @description@ @solution@ @version - 1@ @version - 2@ @accepted code@ @version - 1@ @version - 2@ ...

  5. POI2015题解

    POI2015题解 吐槽一下为什么POI2015开始就成了破烂波兰文题目名了啊... 咕了一道3748没写打表题没什么意思,还剩\(BZOJ\)上的\(14\)道题. [BZOJ3746][POI20 ...

  6. [Poi2015]

    [POI2015]Łasuchy 一看以为是sb题 简单来说就是每个人获得热量要尽量多 不能找别人 首先这道题好像我自己找不到NIE的情况 很容易想到一个优化 如果一个数/2>另一个数 那么一定 ...

  7. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  8. BZOJ 4385: [POI2015]Wilcze doły

    4385: [POI2015]Wilcze doły Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 648  Solved: 263[Submit][ ...

  9. BZOJ 4384: [POI2015]Trzy wieże

    4384: [POI2015]Trzy wieże Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 217  Solved: 61[Submit][St ...

随机推荐

  1. UIImagePickerController详解

    转载自:http://blog.csdn.net/kingsley_cxz/article/details/9157093 1.UIImagePickerController的静态方法: imagep ...

  2. Stanford机器学习---第八讲. 支持向量机SVM

    原文: http://blog.csdn.net/abcjennifer/article/details/7849812 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回 ...

  3. poj2993 翻转2996

    Emag eht htiw Em Pleh Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2944   Accepted:  ...

  4. 《linux备份与恢复之一》.tar.bz2与.tar.gz格式的文本压缩率比较

    对于文本压缩,据说bzip的算法要优于gzip,从而拥有更好的压缩比.特地找了两个文件来做一下测试,以下为测试结果:   (1)源文件为591MB, .tar.bz2文件为61MB(10.32%), ...

  5. python string与list互转

    因为python的read和write方法的操作对象都是string.而操作二进制的时候会把string转换成list进行解析,解析后重新写入文件的时候,还得转换成string. >>&g ...

  6. AtomicInteger源码分析——基于CAS的乐观锁实现

    AtomicInteger源码分析——基于CAS的乐观锁实现 1. 悲观锁与乐观锁 我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process轮流执行,时间片与时 ...

  7. SQL union和union all的区别

    Union因为要进行重复值扫描,所以效率低.如果合并没有刻意要删除重复行,那么就使用Union All  两个要联合的SQL语句 字段个数必须一样,而且字段类型要“相容”(一致): 如果我们需要将两个 ...

  8. 【leetcode】Excel Sheet Column Number

    Excel Sheet Column Number Related to question Excel Sheet Column Title Given a column title as appea ...

  9. maven web项目build失败

    通过maven build发布web项目到tomcat时报如下异常: [INFO] ---------------------------------------------------------- ...

  10. springJDBC一对多关系,以及Java递归,jsp递归的实现

    maven编译,springMVC+spring+springJDBC框架. 要实现的功能是一个文件夹下,可能显示n个文件夹,每个文件夹下又可能显示n个文件夹.... 前台效果: