POJ 3250 Bad Hair Day 简单DP 好题

Description

Some of Farmer John‘s N cows (1 ≤ N ≤ 80,000) are having a bad hair day! Since each cow is self-conscious about her messy hairstyle, FJ wants to count the number of other cows that can see the top of other cows‘ heads.

Each cow i has a specified height hi (1 ≤ h≤ 1,000,000,000) and is standing in a line of cows all facing east (to the right in our diagrams). Therefore, cow i can see the tops of the heads of cows in front of her (namely cows i+1, i+2, and so on), for as long as these cows are strictly shorter than cow i.

Consider this example:

        ==       ==   -   =         Cows facing right -->=   =   == - = = == = = = = =1 2 3 4 5 6 

Cow#1 can see the hairstyle of cows #2, 3, 4
Cow#2 can see no cow‘s hairstyle
Cow#3 can see the hairstyle of cow #4
Cow#4 can see no cow‘s hairstyle
Cow#5 can see the hairstyle of cow 6
Cow#6 can see no cows at all!

Let ci denote the number of cows whose hairstyle is visible from cow i; please compute the sum of c1 through cN.For this example, the desired is answer 3 + 0 + 1 + 0 + 1 + 0 = 5.

Input

Line 1: The number of cows, N
Lines 2..N+1: Line i+1 contains a single integer that is the height of cow i.

Output

Line 1: A single integer that is the sum of c1 through cN.

Sample Input

6
10
3
7
4
12
2

Sample Output

5

题意: 有n头牛从左到右排成一行,从左到右编号为1~n,并且牛的头是朝向右的,即每头牛只可以看到他们右边的牛。现在给出n头牛的身高,设c[i]表示第i头牛可以看到多少头牛的头顶。求所有c[i]的和。

简单DP

设dp[i]表示第i头牛在看的时候是被第dp[i]头牛挡住视线的,即i+1~dp[i]-1这个区间的牛都可以被第i头牛看到。所以第i头牛看到的数目为:dp[i]-i-1

这道题也可以用栈来做。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4
 5 const int maxn=80000+5;
 6 const long long inf=0x3f3f3f3f;
 7
 8 #define LL long long
 9
10 LL h[maxn];
11 LL dp[maxn];
12
13 int main()
14 {
15     int n;
16     while(~scanf("%d",&n))
17     {
18         for(int i=1;i<=n;i++)
19         {
20             scanf("%lld",&h[i]);
21         }
22         n++;
23         h[0]=h[n]=inf;
24
25         for(int i=n-1;i>0;i--)
26         {
27             int tmp=i+1;
28             dp[i]=i+1;
29             while(h[i]>h[tmp])
30             {
31                 dp[i]=dp[tmp];
32                 tmp=dp[tmp];
33             }
34         }
35         LL ans=0;
36         for(int i=1;i<n;i++)
37         {
38             ans+=(dp[i]-i-1);
39         }
40         printf("%lld\n",ans);
41     }
42     return 0;
43 }

188ms

				
时间: 2024-12-01 09:36:12

POJ 3250 Bad Hair Day 简单DP 好题的相关文章

poj 1739 Tony&#39;s Tour 插头dp模板题

题意: 给一个迷宫,求左下角到右下角的路径数. 分析: 插头dp的模板题,建议先看cdq的论文再看代码,这份代码在模板基础上略微有改动.论文地址http://wenku.baidu.com/view/ed2b3e23482fb4daa58d4b74.html 代码: #include <iostream> using namespace std; const int maxD=16; const int HASH=10007; const int STATE=1000024; int N,M;

POJ 1155 TELE 背包型树形DP 经典题

由电视台,中转站,和用户的电视组成的体系刚好是一棵树 n个节点,编号分别为1~n,1是电视台中心,2~n-m是中转站,n-m+1~n是用户,1为root 现在节点1准备转播一场比赛,已知从一个节点传送数据到达另一个节点,电视台需要一定的费用 若可以传送数据到达用户的节点n-m+1~n,这些用户各自愿意支付一定的费用给电视台 现在电视台希望在不亏本的情况下为尽量多的用户转播比赛 输出最多可以为多少用户转播比赛 背包类型的树形DP第一题 dp[i][j]表示以节点i为根的子树有j个用户获得转播,电视

POJ 2385 Apple Catching(简单DP)

It is a little known fact that cows love apples. Farmer John has two apple trees (which are conveniently numbered 1 and 2) in his field, each full of apples. Bessie cannot reach the apples when they are on the tree, so she must wait for them to fall.

POJ 1163 The Triangle (简单 DP 数字的最大路线和)

题目大意:从三角形顶部数字走,每次只能走到这个数字的左下角或者右下角的数字,直到底部,计算走过的线路的数字之和,求这个和的最大值. #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int MAXN = 105; int dp[MAXN][MAXN], a[MAXN][MAXN]; int main() { int n; while( cin>&g

POJ 3280:Cheapest Palindrome 区间DP好题

Cheapest Palindrome 题目链接: http://poj.org/problem?id=3280 题意: 给出一个只由小写字母组成的串,可以添加或删除一些字母(添加和删除都需要花费且花费不同),求将这个串改变成一个回文串的最小花费. 题解: 设dp[i][j]是将区间[i,j]改变成回文串的最小花费,则两种情况 ①显而易见,当s[i]==s[j]时,dp[i][j]=dp[i+1][j-1] ②当s[i]!=s[j]时,dp[i][j]有四种可能的取值,区间 [i,j-1] 删除

UVALive 4764 简单dp水题(也可以暴力求解)

B - Bing it Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Practice UVALive 4764 Description I guess most of you played cards on the trip to Harbin, but I'm sure you have never played the following card game. Thi

[ACM] POJ 2342 Anniversary party (树形DP入门题)

Anniversary party Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4410   Accepted: 2496 Description There is going to be a party to celebrate the 80-th Anniversary of the Ural State University. The University has a hierarchical structure

POJ 3009 Curling 2.0 简单DFS 好题

Description On Planet MM-21, after their Olympic games this year, curling is getting popular. But the rules are somewhat different from ours. The game is played on an ice game board on which a square mesh is marked. They use only a single stone. The

poj 3254 状压dp入门题

1.poj 3254  Corn Fields    状态压缩dp入门题 2.总结:二进制实在巧妙,以前从来没想过可以这样用. 题意:n行m列,1表示肥沃,0表示贫瘠,把牛放在肥沃处,要求所有牛不能相邻,求有多少种放法. #include<iostream> #include<cstring> #include<cmath> #include<queue> #include<algorithm> #include<cstdio> #d