HDU5406---CRB and Apple( DP) 2015 Multi-University Training Contest 10
题意比较简单,
dp[i][j] 表示上一次男女吃的deliciousness分别为i, j的时候的吃的最多的苹果。
那么dp[i][j] = max(dp[i][k] + 1), 0 < k <= j
dp[i][j] = max( max(dp[k][j]) + 1 ) , 0 < k <= i
对于第一个式子最大值 用树状数组线段树都可以解决, 第二个式子如果每次从0遍历到i再找最值的话,显然会超时。
仔细想想便可以发现第二个最值和第一个是一样的。 这个不好解释。 像是对称性那种 一样。
#include <bits/stdc++.h>
using namespace std;
const int MAXN = ;
struct Node{
int h, d;
bool operator < (const Node &rhs)const{
return h != rhs.h ? h > rhs.h : d < rhs.d;
}
}apple[MAXN];
int arr[MAXN<<][MAXN<<];
int MAX;
inline int lowbit (int x){
return x & -x;
}
void Modify (int x, int y, int d){
while (y < MAX){
arr[x][y] = max(arr[x][y], d);
y += lowbit(y);
}
}
int query (int x, int y){
int res = ;
while (y){
res = max(arr[x][y], res);
y -= lowbit(y);
}
return res;
}
int lsh[MAXN << ], lshtot, tmp[MAXN << ];
int main()
{
int T, n;
scanf ("%d", &T);
while (T--){
scanf ("%d", &n);
lshtot = ;
for (int i = ; i < n; i++){
scanf ("%d%d", &apple[i].h, &apple[i].d);
lsh[lshtot++] = apple[i].d;
}
sort (apple, apple+n);
sort (lsh, lsh+lshtot);
lshtot = unique(lsh, lsh+lshtot) - lsh;
for (int i = ; i < n; i++){
apple[i].d = lower_bound(lsh, lsh+lshtot, apple[i].d) - lsh + ;
}
MAX = lshtot + ;
memset(arr, , sizeof (arr));
for (int i = ; i < n; i++){
for (int j = ; j <= lshtot+; j++){
tmp[j] = query(j, apple[i].d);
}
for (int j = ; j <= lshtot+; j++){
Modify(apple[i].d, j, tmp[j]+);
Modify(j, apple[i].d, tmp[j]+);
}
}
int ans = ;
for (int i = ; i <= lshtot+; i++){
ans = max(ans, query(i, lshtot+));
}
printf("%d\n", ans);
}
return ;
}
HDU5406---CRB and Apple( DP) 2015 Multi-University Training Contest 10的更多相关文章
- 2015 Multi-University Training Contest 10 hdu 5406 CRB and Apple
CRB and Apple Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- 2015 Multi-University Training Contest 10(9/11)
2015 Multi-University Training Contest 10 5406 CRB and Apple 1.排序之后费用流 spfa用stack才能过 //#pragma GCC o ...
- LightOJ 1033 Generating Palindromes(dp)
LightOJ 1033 Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
- lightOJ 1047 Neighbor House (DP)
lightOJ 1047 Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...
- UVA11125 - Arrange Some Marbles(dp)
UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...
- 【POJ 3071】 Football(DP)
[POJ 3071] Football(DP) Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4350 Accepted ...
- 初探动态规划(DP)
学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...
- Tour(dp)
Tour(dp) 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序),各点x坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...
- 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)
.navbar-nav > li.active > a { background-image: none; background-color: #058; } .navbar-invers ...
随机推荐
- Shell 获取当前时间
#! /bin/bash time=`date '+%Y-%m-%d %H:%M:%S'` # echo $time sql='SELECT `username`, `password` FROM ` ...
- poj 1780 code(欧拉路)
/* 对于n为密码想要序列最短 那么 1234 2345 这两个一定挨着 就是说 前一个的后n-1位是后一个的前n-1位 假设n==3 我们用0-99作为点的编号建图 然后每个点连出去10条边 两个相 ...
- web-请求无缓存
<head><META HTTP-EQUIV="pragma" CONTENT="no-cache"><META HTTP-EQU ...
- Linux sed命令删除指定行
一.删除包含匹配字符串的行## 删除包含baidu.com的所有行sed -i '/baidu.com/d' domain.file 二.删除匹配行及后所有行## 删除匹配20160229的行及后面所 ...
- SQL批量信息保存(XML格式字符串数据)
/* *功能:SQL批量信息录入 *此存储过程获取表单信息,插入表中.*/CREATE PROC [dbo].[sp_SaveToMX1]@XML text --明细表XML字符串信息ASBEG ...
- scrolView
禁止UIScrollView垂直方向滚动,只允许水平方向滚动 scrollview.contentSize = CGSizeMake(长度, 0); 禁止UIScrollView水平方向滚动,只允许 ...
- AlertView + Block 的使用
AlertView的使用还是很频繁的,扁平化以后似乎也不是那么丑了,但是到现在为止官方还是在用Delegate来处理点击事件,很影响程序的可读性. 如果用Block那么就会一目了然.自己本来想写一个, ...
- ExtJS智能提示工具spket安装与破解
用myeclipse写java程序,最怕的是什么呢,写javascript代码,原因很简单,没有智能提示,ExtJS是完全js代码的界面库,写起来就更痛苦了,幸好有人做了spket插件,此文采用傻瓜式 ...
- JS动态加载 js css
1.动态加载js function loadScript( url ){ var script = document.createElement( "script" ); scri ...
- 正则如何匹配div下的所有<li>标签?
<?php header('Content-Type:text/html;charset=utf-8'); $str = '<div class="c1s"> & ...