码迷,mamicode.com
首页 > 其他好文 > 详细

动态规划——炮弹问题

时间:2020-04-29 11:07:31      阅读:75      评论:0      收藏:0      [点我收藏+]

标签:系统   测试的   ++   有一个   分析   esc   ann   dma   数据   

问题

某国进行军事演戏,研发一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于等于前一发的高度。某天,雷达捕捉到敌国导弹来袭。由于该系统还在试用阶段,所以只用一套系统,因此有可能不能拦截所有的导弹。请你帮忙选择一套系统,根据测试的导弹数量和每次导弹飞来的高度,计算出最多能拦截导弹的数目。

 

分析

实质是寻找最长递降子序列。

 

code

 1 import java.util.Scanner;
 2 
 3 public class Main{
 4     public static void main(String args[]) {
 5         Scanner s = new Scanner(System.in);
 6         int N = s.nextInt(); //测试数据的数量
 7         int[] ar = new int[20];
 8         while(N>0) {
 9             int n = s.nextInt();
10             for(int i=0;i<n;i++) {
11                 ar[i] = s.nextInt();
12             }
13             int count = findMaxDesc(ar,n);
14             N--;
15             System.out.println(count);
16         }
17         s.close();
18         
19     }
20     //寻找最长递减子序列
21     public static int findMaxDesc(int[] ar, int n) {
22         int[] dp = new int[n];
23         dp[0] = 1; //初始化
24         int max = dp[0]; //记录最大值
25         for(int i=1;i<n;i++) {
26             int temp = 0;
27             for(int j=i-1;j>=0;j--) {
28                 if(ar[j]>=ar[i]) {
29                     temp = Math.max(temp, dp[j]);
30                 }
31             }
32             dp[i] = temp+1; //更新当前位置值
33             max = Math.max(max, dp[i]); //更新最大值
34         }
35         return max;
36     }
37 }

 

动态规划——炮弹问题

标签:系统   测试的   ++   有一个   分析   esc   ann   dma   数据   

原文地址:https://www.cnblogs.com/dream-flying/p/12800360.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!