一、问题
你是一名基金明星经理,这天同事小坤向你请教“逢低吸纳”这一成功秘诀。“逢低吸纳”这一秘诀是每次你购买基金时的价格一定要比你上次购买的价格低,同事小坤照着这个秘诀每天观察基金的走势,看看他最多能买入几次(每天最多只买入一次,不一定是连续几天)。
二、要求
输入格式:
第1行为整数N,表示能购买基金的天数;第2行是N个正整数,为每一天基金的价格。
输出格式:
输出一个整数表示可购买基金的最多天数。
输入样例:
在这里给出一组输入。例如:
12
58 59 44 54 58 54 60 57 68 52 88 77
输出样例:
在这里给出相应的输出。例如:
4
三、代码
import java.util.ArrayList;
import java.util.Scanner;
public class Main{
//比较函数
public static int getmax(int a,int b){
return a>b?a:b;
}
//获取最长天数函数
public static int getDays(ArrayList<Integer> arrayList,int n){
int dp[]=new int[99];//定义一个数组用来存每一个基金可以被选中的次数
for(int i=0;i<n;i++){
dp[i]=1;//每一个基金至少被选中一次 都先初始化为1
for(int j=0;j<i;j++){
if(arrayList.get(i)<arrayList.get(j))//如果 a<b 说明 a这个基金可以在b这个基金下选中 a被选中的次数是在b被选中的次数上+1
dp[i]=getmax(dp[i],dp[j]+1);
}
}
//将dp从小到大排序整理
for(int i=0;i<n;i++){
for(int j=0;j<n-i;j++)
if(dp[j]>dp[j+1]){
int t=dp[j];
dp[j]=dp[j+1];
dp[j+1]=t;
}
}
return dp[n];//返回最大值
}
public static void main(String[] args) {
ArrayList<Integer> arr=new ArrayList();
Scanner scanner=new Scanner(System.in);
String ss=scanner.nextLine();
int n=Integer.valueOf(ss);
ss=scanner.nextLine();
String temp[]=ss.split(" ");
for (int i = 0; i < temp.length; i++) {
arr.add(Integer.valueOf(temp[i]));
}
int a=getDays(arr,n);
System.out.print(a);
}
}