您的位置:首页 > 其它

动态规划_拦截导弹

2015-08-19 09:28 204 查看
被拦截的导弹应该按照飞来的高度组成一个非递增序列。求最长非递增序列的长度。

#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
= 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: