http://poj.org/problem?id=3183
Stump Removal
| Time Limit:1000MS | Memory Limit:65536K | |
Description
Always thinking of the cows' grazing experience, FJ has found that he must remove N (1 <= N <= 50,000) unsightly stumps from the pasture. The stumps are conveniently arranged in a straight line and numbered 1..N with each stump having some height H_i (1 <= H_i <= 10,000).
FJ will use the traditional high explosives to destroy the stumps. These high explosives are formulated to destroy adjacent stumps as long as those adjacent stumps are strictly shorter than the nearest stump being destroyed. The blast can continue past the closest adjacent stump to the next adjacent stump if it is even shorter than the nearest stump just destroyed. As soon as a stump encountered by the blast wave is not shorter, though, no more destruction occurs on that side of the target stump (the other side follows the same rules with whatever stumps might appear there).
Consider a line of nine stumps with these heights:
Help FJ determine the minimum number of explosive charges he needs to destroy the stumps.
FJ will use the traditional high explosives to destroy the stumps. These high explosives are formulated to destroy adjacent stumps as long as those adjacent stumps are strictly shorter than the nearest stump being destroyed. The blast can continue past the closest adjacent stump to the next adjacent stump if it is even shorter than the nearest stump just destroyed. As soon as a stump encountered by the blast wave is not shorter, though, no more destruction occurs on that side of the target stump (the other side follows the same rules with whatever stumps might appear there).
Consider a line of nine stumps with these heights:
1 2 5 4 3 3 6 6 2If FJ blows up the third stump (with height 5), then the second stump will also be destroyed (height 2) and the first stump (height 1) will also be destroyed. Likewise, the fourth stump (height 4) and fifth stump (height 3) will be destroyed since they are successively shorter, leaving the line like this:
* * * * * 3 6 6 2Two more explosives (at stumps 7 and 8) will destroy the rest.
Help FJ determine the minimum number of explosive charges he needs to destroy the stumps.
Input
Line 1: A single integer, N
Lines 2..N+1: Line i+1 contains H_i
Lines 2..N+1: Line i+1 contains H_i
Output
Lines 1..?: Each line contains one integer which is the index of a stump to blow up. The indices must be listed in increasing order.
Sample Input
9 1 2 5 4 3 3 6 6 2
Sample Output
3 7 8
/* Author : yan
* Question : POJ 3183 Stump Removal
* Data && Time : Monday, January 03 2011 11:04 PM
*/
#include<stdio.h>
#define bool _Bool
#define true 1
#define false 0
#define MAX 50005
int hight[MAX];
int n;
int cache_index;
int highest(int *start)
{
int _i;
for(_i= *start;_i<n;_i++)
{
if(hight[_i]>=hight[_i+1])
{
cache_index=_i;
break;
}
}
while(hight[_i]>hight[_i+1]) _i++;
*start=_i;
return cache_index;
}
int main()
{
//freopen("input","r",stdin);
int i;
int ans;
int start=-1;
scanf("%d",&n);
for(i=0;i<n;i++) scanf("%d",&hight[i]);
while(start<n)
{
start++;
ans=highest(&start);
printf("%d/n",ans+1);
}
return 0;
}
本文介绍了一种通过模拟爆炸过程来解决树桩移除问题的算法。该算法应用于一系列高度不等的树桩中,通过最少次数的爆炸操作实现所有树桩的移除。文章详细解释了算法的工作原理,并提供了一个C语言实现的例子。
624

被折叠的 条评论
为什么被折叠?



