uva 12002 - Happy Birthday(LIS)
来源:互联网 发布:.shop域名价值 编辑:程序博客网 时间:2024/05/17 07:21
题目链接:uva 12002 - Happy Birthday
题目大意:给出一个序列,表示说有n个碟子,每个数字代表碟子的大小,现在开始堆碟子,可以选择在上面和下面放,不过放上面的碟子必须小于等于最上面的碟子,放在下面的碟子必须大于等于最下面的碟子。问说最多能放多少碟子。
解题思路:和uva 11456 做法相似,只不过说这题可以取相同的大小,那么只需要分成两种情况考虑即可,一种是将当前起始的值归入升序中,一种是归进降序中。
#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;const int N = 505;int n, s[N], up[N], down[N];void init () {for (int i = 1; i <= n; i++)scanf("%d", &s[i]);for (int i = n; i; i--) {up[i] = down[i] = 1;for (int j = n; j > i; j--) {if (s[j] <= s[i])down[i] = max(down[i], down[j] + 1);if (s[j] >= s[i])up[i] = max(up[i], up[j] + 1);}}}int cat (int k, int p, int a) {int ans = 0;for (int i = p; i <= n; i++) {if (a == 1 && s[i] >= k)ans = max(ans, up[i]);if (a == -1 && s[i] <= k)ans = max(ans, down[i]);}return ans;}int solve () {int ans = 0;for (int i = 1; i <= n; i++) {int u = up[i] + cat(s[i]-1, i, -1);int v = down[i] + cat(s[i]+1, i, 1);ans = max(ans, max(u, v));}return ans;}int main () {while (scanf("%d", &n) == 1 && n) {init ();printf("%d\n", solve());}return 0;}
1 0
- uva 12002 - Happy Birthday(LIS)
- UVA 12002 Happy Birthday(dp+LIS)
- UVA - 12002 Happy Birthday
- uva 12002 Happy Birthday (dp)
- UVA 11373 Happy Birthday【计算/解析几何综合】
- uva 12554 - A Special "Happy Birthday" Song!!!
- UVA - 12554 A Special "Happy Birthday" Song!!!
- UVa 12554 - A Special "Happy Birthday" Song!!!
- Happy birthday!
- HAPPY BIRTHDAY
- HAPPY BIRTHDAY!!
- Happy Birthday :)
- Happy Birthday
- happy birthday!
- happy birthday
- Happy birthday
- Happy Birthday~
- happy birthday
- Mysql命令行
- Ubuntu 13.04下构建Qt5开发环境
- 第九次作业--forEach
- struts2 第二讲
- 页面弹出框,关闭后再打开,控件值的初始化
- uva 12002 - Happy Birthday(LIS)
- 一个女程序员的开始
- 题目1022:游船出租
- Android中五种常用的menu(菜单)
- Android之Http协议编程02
- 微软挑战赛之传话游戏问题
- JSON系列教程
- 点名程序 好玩
- 模仿Path菜单按钮的效果