动态规划_拦截导弹

Posted yutingliuyl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态规划_拦截导弹相关的知识,希望对你有一定的参考价值。

被拦截的导弹应该依照飞来的高度组成一个非递增序列。求最长非递增序列的长度。

#include <iostream>
using namespace std;

int main()
{
	int h[2000], d[2000], c;			//h表示 高度值, d表示最优值, c是能拦截的最多导弹数 
	int count = 0;							//统计飞来的导弹数 
	while (cin >> h[count++] && h[count-1]);				//输入高度 
	d[count-1] = 1; 					// d[n] = 1
	c = 1;			//用动态规划计算全部的最优值
	for (int i = count - 2; i>=0; --i)
	{
		int max = 0;
		for (int j = i+1; j<count; ++j)
		{
			if ((h[i] >= h[j]) && max < d[j])
				max = d[j];
		}
		d[i] = max + 1;
		if (c < d[i])
			c = d[i];
	} 
	cout << c << endl;
	return 0;
} 


以上是关于动态规划_拦截导弹的主要内容,如果未能解决你的问题,请参考以下文章

拦截导弹(线性动态规划)

ALGO-13 拦截导弹(动态规划(贪心))

线性状态动态规划 P1020 导弹拦截最长上升子序列

动态规划——炮弹问题

动态规划——背包LISLCS

动态规划入门——在转移的时候使用二分法加速查找