bzoj4884: [Lydsy2017年5月月赛]太空猫(dp)
2018-01-24 21:08
246 查看
题目传送门
。。
解法:
很水的dp嘛。
因为你落地了才能左右动。
所以每个横坐标只有两种情况一种天一种第。
分两种情况dp转移咯。
代码实现:
。。
解法:
很水的dp嘛。
因为你落地了才能左右动。
所以每个横坐标只有两种情况一种天一种第。
分两种情况dp转移咯。
代码实现:
#include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> #include<algorithm> #include<cmath> #include<queue> using namespace std; int n;long long s[110000],x[110000],f[2][110000];//0下1上 int main() { scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%lld",&s[i]); for(int i=1;i<=n;i++)scanf("%lld",&x[i]); for(int i=1;i<=n;i++)f[1][i]=f[0][i]=99999999999999999; f[0][1]=0;f[1][1]=s[1]-x[1]; for(int i=2;i<=n;i++) { if(x[i]>=s[i-1]||s[i]<=x[i-1]){printf("-1\n");return 0;} if(x[i]<=x[i-1])f[0][i]=f[0][i-1]; if(s[i]>=s[i-1])f[1][i]=f[1][i-1]; f[0][i]=min(f[0][i],f[1][i]+s[i]-x[i]); f[1][i]=min(f[1][i],f[0][i]+s[i]-x[i]); } if(f[0] ==99999999999999999)printf("-1\n"); else printf("%lld\n",f[0] ); return 0; }
相关文章推荐
- bzoj 4884 [Lydsy2017年5月月赛]太空猫(简单dp)
- BZOJ 4884 [Lydsy2017年5月月赛]太空猫(单调DP)
- 【bzoj4884】[Lydsy2017年5月月赛]太空猫 dp
- 4884: [Lydsy2017年5月月赛]太空猫
- [BZOJ4884][Lydsy2017年5月月赛]太空猫
- BZOJ4884 [Lydsy2017年5月月赛]太空猫
- BZOJ4883 [Lydsy2017年5月月赛]棋盘上的守卫
- bzoj 4881: [Lydsy2017年5月月赛]线段游戏 树状数组+set
- BZOJ4879: [Lydsy2017年5月月赛]失控的数位板
- bzoj 4878: [Lydsy2017年5月月赛]挑战NP-Hard dfs
- bzoj4883 [Lydsy2017年5月月赛]棋盘上的守卫
- 4883: [Lydsy2017年5月月赛]棋盘上的守卫
- BZOJ 4878([Lydsy2017年5月月赛]挑战NP-Hard-染色问题)
- 4878: [Lydsy2017年5月月赛]挑战NP-Hard
- BZOJ4881: [Lydsy2017年5月月赛]线段游戏
- 4881: [Lydsy2017年5月月赛]线段游戏
- bzoj 4886: [Lydsy2017年5月月赛]叠塔游戏 并查集
- [bzoj4884][DP]太空猫
- BZOJ4882: [Lydsy2017年5月月赛]卡常生成树
- BZOJ4883: [Lydsy2017年5月月赛]棋盘上的守卫