JD 1550:分糖果(线性dp + 记忆化搜索)
来源:互联网 发布:我国近年财政补贴数据 编辑:程序博客网 时间:2024/06/06 08:50
- 题目描述:
给从左至右排好队的小朋友们分糖果,
要求:
1.每个小朋友都有一个得分,任意两个相邻的小朋友,得分较高的所得的糖果必须大于得分较低的,相等则不作要求。
2.每个小朋友至少获得一个糖果。
求,至少需要的糖果数。
- 输入:
输入包含多组测试数据,每组测试数据由一个整数n(1<=n<=100000)开头,接下去一行包含n个整数,代表每个小朋友的分数Si(1<=Si<=10000)。
- 输出:
对于每组测试数据,输出一个整数,代表至少需要的糖果数。
- 样例输入:
31 10 136 2 321 1
- 样例输出:
452
代码:
#include <iostream>#include <string>#include <string.h>#include <map>#include <stdio.h>#include <algorithm>#include <queue>#include <vector>#include <math.h>#include <set>#define Max(a,b) ((a)>(b)?(a):(b))#define Min(a,b) ((a)<(b)?(a):(b))#define SWAP(a , b){ int temp = a; a = b; b = temp;}#define Max_N 1000008using namespace std;int x[Max_N];int honey[Max_N];int n;int dp(int i)//记忆化搜索{ if(honey[i] > -1) return honey[i]; honey[i] = 1; if(i + 1 <= n&&x[i] > x[i + 1]) honey[i] = Max(honey[i] , dp(i + 1) + 1); if(i - 1 >= 1&&x[i - 1] < x[i]) honey[i] = Max(honey[i] , dp(i - 1) + 1); return honey[i];}int solve(){ int sum = 0; for(int i = 1;i <= n;i++) sum += dp(i); return sum;}int main(){ while(cin >> n) { memset(honey,-1,sizeof(honey)); for(int i = 1;i <= n;i++) cin >> x[i]; cout << solve() << endl; } return 0;}
0 0
- JD 1550:分糖果(线性dp + 记忆化搜索)
- UVa 免费糖果(记忆化搜索)
- dp记忆化搜索
- 记忆化搜索,dp
- 记忆化搜索DP
- 【BZOJ1589】[Usaco2008 Dec]Trick or Treat on the Farm 采集糖果【SCC】【基环外向树】【DP】【记忆化搜索】
- poj1088 dp+记忆化搜索
- UVA103 DP记忆化搜索
- poj1664 dp记忆化搜索
- DP/记忆化搜索+set
- [dp+记忆化搜索]uva10626
- HDU3779Railroad DP 记忆化搜索
- nyoj832 记忆化搜索dp
- poj1088 Dp,记忆化搜索
- UVA10285 DP记忆化搜索
- uva 10118 免费糖果 深搜+记忆化搜索
- 蓝桥杯 算法提高 拿糖果(dfs+记忆化搜索)
- POJ 1958 Strange Towers of Hanoi (四塔问题,线性dp,记忆化搜索)
- Cocos2d-x中的词典类CCDictionary深入分析
- 华为股权簿曝光:员工大多数万股
- 定义两个结构体
- 百科 拓展视野
- 华为股权曝光:核心谜题待解
- JD 1550:分糖果(线性dp + 记忆化搜索)
- 进程与线程的描述与控制,核心级线程和用户级线程的区别
- Canopy Clustering
- Jndi技术
- HDU 1569——方格取数(2) 【不用vector】
- 性能测试学习,转自培训班论坛
- Linux gdb编译器
- 木瓜移动沈思:从学生时代到创业始终相信笨鸟先飞
- 杀死进程