博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Yahoo Programming Contest 2019 D-Ears
阅读量:7117 次
发布时间:2019-06-28

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

题目大意

分析

我们不难整个线段可以被划分为5段

我们设路径到达的最左的地方是L,最右的地方是R

则这五段分别是0~L,L+1~S,S+1~T,T+1~R,R+1~N

最外面的两端不经过,所以花费为a[i]

S+1~T这一段只能通过奇数次,剩余两段只能通过偶数次

所以这三段的答案均与奇偶性有关系

因此我们可以得到dp[i][0/1/2/3/4]表示现在考虑到第i个点,这个点属于第1/2/3/4/5段时的最优解

转移非常简单,详见代码

代码

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define int long longconst int inf = 1e16+7;int dp[200100][5],a[200100];inline int wh2(int x){ if(x==0)return 2; return x%2;}inline int wh1(int x){ if(x==0)return 1; return (x%2)^1;}signed main(){ int n,m,i,j,k; scanf("%lld",&n); for(i=1;i<=n;i++)scanf("%lld",&a[i]); for(i=1;i<=n;i++) for(j=0;j<5;j++) dp[i][j]=inf; for(i=0;i<5;i++)dp[0][i]=0; for(i=1;i<=n;i++){ int wh=dp[i-1][0]; dp[i][0]=wh+a[i]; wh=min(wh,dp[i-1][1]); dp[i][1]=wh+wh2(a[i]); wh=min(wh,dp[i-1][2]); dp[i][2]=wh+wh1(a[i]); wh=min(wh,dp[i-1][3]); dp[i][3]=wh+wh2(a[i]); wh=min(wh,dp[i-1][4]); dp[i][4]=wh+a[i]; } cout<
<

 

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

你可能感兴趣的文章
SSM-SpringMVC-03:SpringMVC执行流程一张有意思的图
查看>>
愚人节老板发话了,免费送书 + 免费入驻Java知识星球!!
查看>>
题解 P2350 【[HAOI2012]外星人】
查看>>
[20180423]关于闪回表与主外键约束.txt
查看>>
新经资讯项目业务逻辑梳理
查看>>
JDK1.8源码(五)——java.util.ArrayList 类
查看>>
Android - SharedPreferences
查看>>
Deepin 操作系统联合创始人宣布离职
查看>>
系统思考的定义
查看>>
forEach遍历数组对象且去重
查看>>
逸鹏说道:读王阳明、曾国藩有所感
查看>>
5月19-20日WebRTCon 2018 梳理全球WebRTC技术实践与案例
查看>>
Redux源码分析之基本概念
查看>>
ubuntu(14.04) 网路管理
查看>>
CSS-用伪类制作小箭头(轮播图的左右切换btn)
查看>>
(二)Hyperledger Fabric 1.1安装部署-Fabric Samples
查看>>
[Java 进阶]Java中的国际化
查看>>
7月2日云栖精选夜读丨支撑全网70%世界杯流量 盘点世界杯直播背后的阿里云黑科技...
查看>>
使用React制作一个可配置的页面生成器[0]
查看>>
请手动释放你的资源(Please release resources manually)
查看>>