hdoj1257 最少拦截系统

来源:互联网 发布:美工视频教程全套 编辑:程序博客网 时间:2024/04/29 03:42

第一篇博客,想想还有些小激动。


使用LIS,最长递增子序列,导弹打的高度是递减的,如果在序列中出现了递增,那么说明我们需要另外一套系统来打这个递增的高度,也就是出现了多少次的递增,我们就需要多少套系统。求出最长递增子序列就是结果。


#include <stdio.h>#define MAX30050#define CMP(A, B)((A) > (B))int n, num[MAX], len_min[MAX];int BinarySearch(int a, int b, int k){int mid;while (a < b)if (CMP(k, len_min[mid = (a + b) >> 1]))a = mid + 1;elseb = mid;return a;}int LIS(void){inta = 0, b = 0, k;inti;for (i = 0; i < n; i++) {if (len_min[k = BinarySearch(a, b - 1, num[i])] >= num[i])len_min[k] = num[i];elselen_min[b++] = num[i];}return b;}int main(void){inti;while (~scanf("%d", &n)) {for (i = 0; i < n; i++) scanf("%d", &num[i]);printf("%d\n", LIS());}return 0;}



0 0
原创粉丝点击