任务描述
本关任务:找出一个序列中的最长下降子序列其中的元素个数。
医院里有一种药剂,其可以稀释成不同的浓度供病人使用,并且对于已知浓度的该药剂,使用时只能稀释不能增加浓度。
由于这种药需求量较大,同一瓶药剂只能给某个病人以及排在他后面的若干人使用。不同的病人对药物的浓度要求可能不同。
现在为了最大限度的利用每一瓶药剂(不考虑容量),已知n个病人所需药物浓度的序列,请计算出一瓶药剂能最多使用的人数。
编程要求
在右侧编辑器中有一个函数Cal,它有两个参数arr和n。
arr中包含n个病人对药物浓度的要求。
请你在这个函数中补充代码,计算并输出一瓶药剂能最多使用的人数。
输入数据由评测系统读取,并传递给Cal函数。具体见测试说明。
测试说明
平台会对你编写的代码进行测试:
测试输入:
6
0.7 0.9 0.6 0.8 0.8 0.4
预期输出:
4
每组输入有两行,第一行有一个数n,第二行的n个数为数组的内容。
#include <algorithm>
using namespace std;
void Cal(double arr[],int n)
{
/********** Begin **********/
//补充代码完成任务
int dp[n];
for(int i=0;i<n;i++) dp[i]=1;
for(int i=n-2;i>=0;i--){
for(int j=i+1;j<n;j++){
if(arr[i]>=arr[j]) dp[i]=dp[i]<(dp[j]+1)?(dp[j]+1):dp[i];
}
}
int max=1;
for(int i=0;i<n;i++){
if(max<dp[i]) max=dp[i];
}
printf("%d",max);
/********** End **********/
}