• nyoj 作业题 dp



    作业题

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:3
    描述

    小白同学这学期有一门课程叫做《数值计算方法》,这是一门有效使用数字计算机求数学问题近似解的方法与过程,以及由相关理论构成的学科……

    今天他们的Teacher S,给他们出了一道作业题。Teacher S给了他们很多的点,让他们利用拉格朗日插值公式,计算出某严格单调函数的曲线。现在小白抄下了这些点,但是问题出现了,由于我们的小白同学上课时走了一下神,他多抄下来很多点,也就是说这些点整体连线不一定还是严格递增或递减的了。这可怎么处理呢。为此我们的小白同学制定了以下的取点规则:

    1、取出尽可能多的满足构成严格单调曲线的点,作为曲线上的点。

    2、通过拉格朗日插值公式,计算出曲线的方程

    但是,他又遇到了一个问题,他发现他写下了上百个点。[- -!佩服吧],这就很难处理了(O_O).。由于拉格朗日插值公式的计算量与处理的点数有关,因此他请大家来帮忙,帮他统计一下,曲线上最多有多少点,以此来估计计算量。

    已知:没有任何两个点的横坐标是相同的。

    输入
    本题包含多组数据:
    首先,是一个整数T,代表数据的组数。
    然后,下面是T组测试数据。对于每组数据包含两行:
    第一行:一个数字N(1<=N<=999),代表输入的点的个数。
    第二行:包含N个数对X(1<=x<=10000),Y(1<=Y<=10000),代表所取的点的横纵坐标。
    输出
    每组输出各占一行,输出公一个整数,表示曲线上最多的点数
    样例输入
    2
    2
    1 2 3 4
    3
    2 2 1 3 3 4
    样例输出
    2
    2

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    
    int n,m;
    int dp1[10001],dp2[10001];
    
    struct node
    {
        int x,y;
    } a[10001];
    int cmp(node A,node B)
    {
        return A.x<B.x;
    }
    
    int main()
    {
        scanf("%d",&n);
        while(n--)
        {
            int i,j,res1=0,res2=0;
            scanf("%d",&m);
            memset(dp2,0,sizeof(dp2));
            memset(dp1,0,sizeof(dp1));
            for(i=0; i<m; i++)
                scanf("%d %d",&a[i].x,&a[i].y);
            sort(a,a+m,cmp);
            for(i=0; i<m; i++)
            {
                dp1[i]=1;//是整个序列的值为1,而不是一个单个的值为1
                dp2[i]=1;
                for(j=0; j<i; j++)
                {
                    if(a[j].y<a[i].y)
                    {
                        dp1[i]=max(dp1[i],dp1[j]+1);
                    }
                    if(a[j].y>a[i].y)
                    {
                        dp2[i]=max(dp2[i],dp2[j]+1);
                    }
                }
                if(res1<dp1[i])
                    res1=dp1[i];
                if(res2<dp2[i])
                    res2=dp2[i];
            }
            printf("%d
    ",res1>res2?res1:res2);
        }
        return 0;
    }
    
    
    
    
    











  • 相关阅读:
    swift 第十四课 可视化view: @IBDesignable 、@IBInspectable
    swift 第十三课 GCD 的介绍和使用
    swift 第十二课 as 的使用方法
    swift 第十一课 结构体定义model类
    swift 第十课 cocopod 网络请求 Alamofire
    swift 第九课 用tableview 做一个下拉菜单Menu
    swift 第八课 CollectView的 添加 footerView 、headerView
    swift 第七课 xib 约束的优先级
    swift 第六课 scrollview xib 的使用
    swift 第五课 定义model类 和 导航栏隐藏返回标题
  • 原文地址:https://www.cnblogs.com/nyist-xsk/p/7264894.html
Copyright © 2020-2023  润新知