博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
p3584 [POI2015]LAS
阅读量:5901 次
发布时间:2019-06-19

本文共 1206 字,大约阅读时间需要 4 分钟。

分析

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

我们需要满足两个条件:

  每个人只能选择一个

  改变选择之后不会比当前获得热量多

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

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

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

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

代码

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
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
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

转载于:https://www.cnblogs.com/yzxverygood/p/10357459.html

你可能感兴趣的文章
Swift - 通过叠加UILabel来实现混合的进度条
查看>>
Android 中 Internal Storage 和 External Storage 的区别
查看>>
移动端拖拽(模块化开发,触摸事件,webpack)
查看>>
Atitit 图像处理 常用8大滤镜效果 Jhlabs 图像处理类库 java常用图像处理类库
查看>>
EF-Linq将查询结果转换为List<string>
查看>>
每天一个linux命令(16):which命令
查看>>
关于不同用户操作同一个文件的问题
查看>>
CentOS 6.4 搭建git 服务器
查看>>
spring配置和注解事务同时存在导致的事务嵌套
查看>>
AE要素选择(点选和拉框选择)
查看>>
AJAX-初学AJAX本地环境配置
查看>>
Java内存模型深度解析:顺序一致性--转
查看>>
VSCode调试配置
查看>>
PHP判断sql语句是否执行成功
查看>>
无穷级数的收敛性
查看>>
【树莓派】树莓派配置无线网络访问
查看>>
Web API--自定义异常结果的处理
查看>>
Python+webdriver爬取博客园“我的闪存”并保存到本地
查看>>
Mysql 常用语句
查看>>
MySQL修改root密码的多种方法
查看>>