#include<stdio.h>constint MAXN =12000;int n, a[MAXN +1], dp[MAXN +1];int MAX=1;intlongestNum(){
dp[1]=1;for(int i =2; i <= n; i++){int flag=0;int max=dp[1];for(int j=1;j<i;j++)//add something here for computing dp[i]{if(a[i]>a[j]&&dp[j]>=max)//要找到j<i且dp[j]最大的j值,一个等于号引发的血案 {
max=dp[j];
flag=1;}//printf("%d",max);}
dp[i]=max+1;if(flag==0)
dp[i]=1;}for(int i=1;i<=n;i++)//add something here for computing the final answer and return it.{//Note: the final answer equals max{dp[1],dp[2],...,dp[n]}if(dp[i]>MAX)
MAX=dp[i];}return MAX;}intmain(){scanf("%d",&n);for(int i =1; i <= n; i++)scanf("%d",&a[i]);printf("%d",longestNum());return0;}
#include<stdio.h>constint Maxn =100;constint MaxConsume =200;int n, r[Maxn +1], p[Maxn +1];//任务i 只能在时刻 ri 后开始处理。任务i 需要 pi个时间单位才能完成,pi存储的是该任务剩余的时间。 inttaskProcess(){int cnt =0, t =0, tasknum = n;while(tasknum){int min = MaxConsume +1, j;//min是干什么用的?标记最小的p[i]的值 //The following loop finds the task j with the earliest possible finishing time among those who can be processed now.for(int i =1; i <= n; i++){if(t >= r[i]&& p[i]>0&& p[i]< min)//注意各个循环的范围 //if(p[i]<min) //add something here,找出能最快完成的赋值为j ,p[j]是最快完成的 {
min=p[i];
j=i;}}//printf("%d ",j);
p[j]--; t++;//process task j in the current time unit.if(p[j]==0){
cnt+=t;//add something here. 完成了一个cnt要+当前的时间
tasknum--;//Hint: Update cnt and tasknum}}return cnt;}intmain(){scanf("%d",&n);for(int i =1; i <= n; i++)scanf("%d",&r[i]);//注意都是从1开始的 for(int i =1; i <= n; i++)scanf("%d",&p[i]);printf("%d",taskProcess());return0;}