1085.Perfect Sequence
来源:互联网 发布:中甲联赛数据统计 编辑:程序博客网 时间:2024/06/04 20:44
【题意】
找到给出的数字集合中满足最小数字乘以一正整数p不小于最大数字的子集的最大容量(= =感觉说的有点拗口。。。)
【思路】
此题可用DP做,先对所有数字由小到大排个序,放在num数组中,然后用 dp[i] 表示 num[i] 为最大数字的数字串中最小数字的下标,
① 若 num[dp[i-1]]*p>=num[i],则 dp[i] = dp[i-1];
② 否则从 dp[i-1] 位置往右找,直到找到满足 num[index]*p>=num[i] 的下标 index,则 dp[i] = index
数字串的长度就是 i-dp[i]+1, 每次更新一个 dp[i] 与之前的最多数字的数量比较并更新一下即可
#include <iostream>#include <vector>#include <algorithm>using namespace std;int main(int argc, char const *argv[]){vector<int> num,dp;//dp[i]代表以i为结尾的满足要求最长数字串的第一个数字下标long long n,p;cin >> n >> p;num.resize(n);dp.resize(n);for(int i=0; i<n; i++){cin >> num[i];}sort(num.begin(),num.end());int maxLen = 1;dp[0] = 0;for(int i=1; i<n; i++){if(num[dp[i-1]]*p>=num[i]){dp[i] = dp[i-1];}else{int index = dp[i-1]+1;while(num[index]*p<num[i]){index++;}dp[i] = index;}if(i-dp[i]+1>maxLen){maxLen = i-dp[i]+1;}}cout << maxLen;system("pause");return 0;}
0 0
- PAT 1085. Perfect Sequence
- 1085. Perfect Sequence (25)
- 1085. Perfect Sequence (25)
- 1085.Perfect Sequence
- 1085. Perfect Sequence (25)
- 1085. Perfect Sequence (25)
- 1085. Perfect Sequence (25)
- 1085. Perfect Sequence (25)
- 1085. Perfect Sequence (25)
- 1085. Perfect Sequence (25)
- 1085. Perfect Sequence (25)
- 1085. Perfect Sequence (25)
- 1085. Perfect Sequence (25)
- 1085. Perfect Sequence
- 1085. Perfect Sequence (25)
- 1085. Perfect Sequence (25)
- 1085. Perfect Sequence (25)
- 1085. Perfect Sequence (25)
- 1084.Broken Keyboard
- 智能家居,来年应该如何持续热度
- PHP mysql 中文乱码
- alter table在MSSQL中的用法
- Cocos2d-x3.3Final(1) ListView常用成员函数(C++)
- 1085.Perfect Sequence
- 基于hadoop的社交网络的分析
- 访问谷歌服务之hosts文件配置工具huhamhire-hosts
- Android Looper和Handler详解
- 1086.Tree Traversals Again
- iOS动画进阶(六)专用图层
- NSValue 使用(十二)
- java 老系统升级 换掉原有类的小方法和有用的注解
- 在linux服务器新建Oracle database