上帝选人

题目描述 Description
世界上的人都有智商IQ和情商EQ。我们用两个数字来表示人的智商和情商,数字大就代表其相应智商或情商高。现在你面前有N个人,这N个人的智商和情商均已知,请你选择出尽量多的人,要求选出的人中不存在任意两人i和j,i的智商大于j的智商但i的情商小于j的情商。

输入描述 Input Description
 第一行一个正整数N,表示人的数量。 第二行至第N+1行,每行两个正整数,分别表示每个人的智商和情商。

输出描述 Output Description
仅一行,为最多选出的人的个数。

样例输入 Sample Input
 3 100 100 120 90 110 80

样例输出 Sample Output
2

数据范围及提示 Data Size & Hint
 N<=1000;

u??
A?z%?%过程为一次一次的购买,每一次购买也许只买一本(这有三种方案),或者买两本(这也有三种方案),或者三本一起买(这有一种方案),最后直到买完所有需要的书。
       2、最后一步我必然会在7种购买方案中选择一种,因此我要在7种购买方案中选择一个最佳情况。
       3、子问题是,我选择了某个方案后,如何使得购买剩余的书能用最少的钱?并且这个选择不会使得剩余的书为负数。母问题和子问题都是给定三卷书的购买量,求最少需要用的钱,所以有“子问题重叠”,问题中三个购买量设置为参数,分别为i、j、k。
       4、的确符合。
       5、边界是一次购买就可以买完所有的书,处理方式请读者自己考虑。
       6、每次选择最多有7种方案,并且不会同时实施其中多种,因此方案的选择互不影响,所以有“子问题独立”。
       7、我可以用minMoney[i][j][k]来保存购买第1卷i本,第2卷j本,第3卷k本时所需的最少金钱。
       8、共有x * y * z 个问题,每个问题面对7种选择,时间为:O( x * y * z * 7) = O( x * y * z )。
       9、用函数MinMoney(i,j,k)来表示购买第1卷i本,第2卷j本,第3卷k本时所需的最少金钱,那么有:
              MinMoney(i,j,k)=min(s1,s2,s3,s4,s5,s6,s7),其中s1,s2,s3,s4,s5,s6,s7分别为对应的7种方案使用的最少金钱:
              s1
= 60 * 0.95 + MinMoney(i-1,j,k)
              s2
= 60 * 0.95 + MinMoney(i,j-1,k)
              s3
= 60 * 0.95 + MinMoney(i,j,k-1)
              s4
= (60 + 60) * 0.9 + MinMoney(i-1,j-1,k)
              s5
= (60 + 60) * 0.9 + MinMoney(i-1,j,k-1)
              s6
= (60 + 60) * 0.9 + MinMoney(i-1,j,k-1)
              s7
= (60 + 60 + 60) * 0.85 + MinMoney(i-1,j-1,k-1)
 
      
      
 
 
----第六节----代码参考------
 
 
       下面提供金矿问题的程序源代码帮助读者理解,并提供测试数据给大家练习。
 
       输入文件名为“beibao.in”,因为这个问题实际上就是背包问题,所以测试数据文件名就保留原名吧。
       输入文件第一行有两个数,第一个是国王可用用来开采金矿的总人数,第二个是总共发现的金矿数。
       输入文件的第2至n+1行每行有两个数,第i行的两个数分别表示第i-1个金矿需要的人数和可以得到的金子数。
 
       输出文件仅一个整数,表示能够得到的最大金子数。
 
       输入样例:
       100 5
       77 92
       22 22
       29 87
       50 46
       99 90
 
       输出样例:
       133

var
  iq,eq:array[1..100]of longint;
  f:array[1..100] of longint;
  n,i1:longint;
function max(a,b:longint):longint;
  begin
    if a>b then exit(a) else exit(b);
  end;
procedure qsort(l,r:longint);
var i,j,mid,t:longint;
begin
    i:=l;
    j:=r;
    mid:=iq[(i+j)div 2];
    repeat
      while iq[i]<mid do inc(i);
      while iq[j]>mid do dec(j);
      if i<=j then
        begin
          t:=iq[i];
          iq[i]:=iq[j];
          iq[j]:=t;
          t:=eq[i];
          eq[i]:=eq[j];
          eq[j]:=t;
          inc(i);
          dec(j);
        end;
    until i>j;
    if l<j then qsort(l,j);
    if r>i then qsort(i,r);
end;
{快速排序}
procedure main;
var i,j,t:longint;
  begin
    t:=0;
    f[1]:=1;
    for i:=2 to n do
      begin
        for j:=1 to i-1 do
          if (eq[j]<eq[i])and(f[j]>f[i])then f[i]:=f[j];
        inc(f[i]);
      end;
    for i:=1 to n do
      t:=max(t,f[i]);
    writeln(t);
  end;
begin
  fillchar(f,sizeof(f),0);
  read(n);
  for i1:=1 to n do read(iq[i1],eq[i1]);
  qsort(1,n);
  main;
end.
{需要用双重关键字排序,先为一个排序后再求另一个严格上升子序列}
时间: 2024-08-25 16:34:50

上帝选人的相关文章

3641 上帝选人

3641 上帝选人 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 世界上的人都有智商IQ和情商EQ.我们用两个数字来表示人的智商和情商,数字大就代表其相应智商或情商高.现在你面前有N个人,这N个人的智商和情商均已知,请你选择出尽量多的人,要求选出的人中不存在任意两人i和j,i的智商大于j的智商但i的情商小于j的情商. 输入描述 Input Description ?第一行一个正整数N,表示人的数量. ?第二

codevs 3641 上帝选人

题目描述 Description 世界上的人都有智商IQ和情商EQ.我们用两个数字来表示人的智商和情商,数字大就代表其相应智商或情商高.现在你面前有N个人,这N个人的智商和情商均已知,请你选择出尽量多的人,要求选出的人中不存在任意两人i和j,i的智商大于j的智商但i的情商小于j的情商. 输入描述 Input Description ?第一行一个正整数N,表示人的数量. ?第二行至第N+1行,每行两个正整数,分别表示每个人的智商和情商.  输出描述 Output Description 仅一行,为

【基础练习】【线性DP】codevs3641 上帝选人题解

这道题目的数据最后一个有问题,特殊处理了 上题目 题目描述 Description 世界上的人都有智商IQ和情商EQ.我们用两个数字来表示人的智商和情商,数字大就代表其相应智商或情商高.现在你面前有N个人,这N个人的智商和情商均已知,请你选择出尽量多的人,要求选出的人中不存在任意两人i和j,i的智商大于j的智商但i的情商小于j的情商. 输入描述 Input Description —第一行一个正整数N,表示人的数量. —第二行至第N+1行,每行两个正整数,分别表示每个人的智商和情商. 输出描述 

动态规划——子序列

Wikioi 1058 合唱队形 题目描述 Description N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK,  则他们的身高满足T1<...<Ti>Ti+1>…>TK(1<=i<=K). 你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形. 输入描述 Input D

【专题】偏序,扫描线

[关键字]偏序,数点,树状数组,线段树,扫描线. 因为涉及多种算法,所以整合到一起. [扫描线] 二维数点,偏序 ★数点问题 ★关于偏序问题的一些总结 一维偏序:排序二分 树状数组 二维偏序:排序扫描线+树状数组(差分)/线段树 三维偏序:排序扫描线+cdq分治+树状数组 排序扫描线+二维数据结构 基本思想是一维扫描线顺序扫描维护差分,一维用数据结构维护区间(线段树维护区间,树状数组差分维护前缀和). [BZOJ3161]布娃娃(扫描线+线段树) BZOJ 4059 Cerc2012 Non-b

TYVJ1716 上帝造题的七分钟

时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 裸体就意味着身体. 描述 “第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵.第二分钟,L说,要能修改,于是便有了将左上角为(a,b),右下角为(c,d)的一个矩形区域内的全部数字加上一个值的操作.第三分钟,k说,要能查询,于是便有了求给定矩形区域内的全部数字和的操作.第四分钟,彩虹喵说,要基于二叉树的数据结构,于是便有了数据范围.第五分钟,和雪说,要有耐心,于是便有了时间限制.第六分钟,吃

BZOJ3884: 上帝与集合的正确用法

Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“元”构成的集合.容易发现,一共有两种不同的“α”. 第三天, 上帝又创造了一个新的元素,称作“β”.“β”被定义为“α”构成的集合.容易发现,一共有四种不同的“β”. 第四天, 上帝创造了新的元素“γ”,“γ”被定义为“β”的集合.显然,一共会有16种不同的“γ”. 如果按照这样下去,上帝创造的第四种元

雷军:天使投资人不是上帝只是配角

雷军说,但是他并非三头六臂,不可能同时做好几件事,通过做天使投资,选贤任能,将想法一点点地付诸于实际,并看到业务的稳步发展,总能给自己带来无尽的满足感. “你们在文章中一定要强调,千万不要小看天使投资人的作用,也不要放大,我们不是上帝,创业者才是主角,我们只是配角.”雷军在接受<创业邦>采访的时候,不止一次强调这个观点.细数国内知名天使投资人,雷军是极少数身兼创业者和天使的双重身份,创业者雷军不喜欢身处神坛,不愿意被称作创业导师,“都是朋友之间帮忙,把我当成一个热心的大婶好了.”雷军说. 雷军

BZOJ 3132: 上帝造题的七分钟( 二维BIT )

二维树状数组... 自己YY一下再推一下应该可以搞出来... ---------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #define rep( i , n ) for( int i = 0 ; i <