ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

p3584 [POI2015]LAS

2019-02-09 14:51:22  阅读:282  来源: 互联网

标签:pre now int POI2015 p3584 && include dp LAS


传送门

分析

f[i][S](S∈[0,4])表示第iii个食物没有被选/左边选/右边选/同时选的状态是由哪一个状态转移来的

我们需要满足两个条件:

  每个人只能选择一个
  改变选择之后不会比当前获得热量多

讨论$a_i$和$a_{i-1}$的大小关系进行转移

输出方案的时候由后向前推过去就好

先固定第一个的状态进行dp

枚举第一个的不同情况就可以了

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
int c[1000100],dp[4][1000100],ans[1000100];
inline void go(int pre,int now){
    if(~dp[2][pre]&&c[pre]>=c[now])dp[0][now]=2;
      else if(~dp[3][pre]&&c[pre]>=c[now]*2)dp[0][now]=3;
    if(~dp[0][pre]&&c[pre]<=c[now])dp[1][now]=0;
      else if(~dp[1][pre]&&c[pre]<=c[now]*2)dp[1][now]=1;
    if(~dp[2][pre]&&c[pre]*2>=c[now])dp[2][now]=2;
      else if(~dp[3][pre]&&c[pre]>=c[now])dp[2][now]=3;
    if(~dp[0][pre]&&c[pre]*2<=c[now])dp[3][now]=0;
      else if(~dp[1][pre]&&c[pre]<=c[now])dp[3][now]=1;
}
int main(){
    int n,m,i,j,k;
    scanf("%d",&n);
    for(i=1;i<=n;i++)scanf("%d",&c[i]);
    for(k=0;k<4;k++){
      memset(dp,-1,sizeof(dp));
      dp[k][1]=4;
      for(i=1;i<n;i++)go(i,i+1);
      go(n,1);
      if(dp[k][1]!=4){
          int now=dp[k][1];
          for(i=n;i>0;i--){
            if(now==1||now==3)ans[(i-2+n)%n+1]=i;
            if(now==2||now==3)ans[i]=i;
            now=dp[now][i];
          }
          for(i=1;i<n;i++)printf("%d ",ans[i]);
          printf("%d\n",ans[i]);
          return 0;
      }
    }
    puts("NIE");
    return 0;
}

标签:pre,now,int,POI2015,p3584,&&,include,dp,LAS
来源: https://www.cnblogs.com/yzxverygood/p/10357459.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有