1085. Perfect Sequence (25)-PAT甲级真题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1085. Perfect Sequence (25)-PAT甲级真题相关的知识,希望对你有一定的参考价值。
1085. Perfect Sequence (25)
Given a sequence of positive integers and another positive integer p. The sequence is said to be a "perfect sequence" if M <= m * p where M and m are the maximum and minimum numbers in the sequence, respectively.
Now given a sequence and a parameter p, you are supposed to find from the sequence as many numbers as possible to form a perfect subsequence.
Input Specification:
Each input file contains one test case. For each case, the first line contains two positive integers N and p, where N (<= 105) is the number of integers in the sequence, and p (<= 109) is the parameter. In the second line there are N positive integers, each is no greater than 109.
Output Specification:
For each test case, print in one line the maximum number of integers that can be chosen to form a perfect subsequence.
Sample Input:10 8 2 3 20 4 5 1 6 7 8 9Sample Output:
8
#include <iostream> #include <algorithm> #include <vector> using namespace std; vector<int> V; int main() { int n,cnt=0; long p; cin >> n >> p; long temp; long max = 0; if (n == 0) { cout << n; return 0; } V.resize(n); for (int i = 0; i < n; i++) { cin >> V[i]; } sort(V.begin(), V.end()); for (int i = 0; i < n; i++) { for (int j = i + max; j <= n - 1; j++) { if (V[i] * p >= V[j]){ if (max < j - i + 1) max = j - i + 1; } else break;//剪枝非常重要 } } cout << max; }
1 该题使用递归寻找解空间时时间空间都爆炸,不可使用。递归迭代每个问题都可思考解法。但在n数值大时,时间空间不可接受。
2 针对最大最小值相关的问题可以用排序解决。
3 适当剪枝减小开销。
以上是关于1085. Perfect Sequence (25)-PAT甲级真题的主要内容,如果未能解决你的问题,请参考以下文章