周末记录--2017.9.10(最长上升子序列优化算法)

来源:互联网 发布:广州聚焦网络怎么样 编辑:程序博客网 时间:2024/06/02 01:17

这周末是开学以来第一次做比赛。来到实验室,感觉实验室真好啊哈哈哈。和新队友磨合了两次。我们三个是这个暑假都没有到学校参加集训。然后今天就写一写这两天比赛的感觉。

首先,我们三个人磨合的还算可以。第一天出了三道题,第二天出了两道题。这两天刚开始我们都是一人看一道题,由于是网络赛,各个学校的大佬都参加,然后就会首先出几道通过率高且做的多的题。然后就集中看那几道题。第一天,有两道水题,我做了一道。不过那道题做了一个小时就比较伤了。不过结果还算不错,一遍A。然后CWH做了一道,比我早,交了3发A了。接下来的时间我们一起做了一道题。还是用了一个数列去解的。这一天的比赛基本没有用到算法。尝试了好几道题都没过。一直水到最后。第二天也就是今天的比赛,看了会题,每找到规律,把题扔给了CWH,然后他做了一会推出了规律,找到了公式直接输出A掉。然后DDG看了一道题,想出了思路,是用最长上升子序列和最长下降子序列去解,于是我就写了最长上升子序列和最长下降子序列的代码,交上以后TLE,改了好几次都TLE,想了想数的范围是1e5,用这样的算法分分钟超时啊。一直纠结了好久,怎么改都超时。后来旁边队的大佬说找了一个非常快的算法,涉及到二分法求解。然后也是求最长上升子序列和最长下降子序列,研究了一会最后把题A掉。最后就是一道斐波那契数列的题。做了好久都没做出来。最后快结束了,查了查用到的是快速幂求矩阵。实在崩溃。。。

这两天题没A多少,但是三个人的磨合还算可以。三个人都还有上升的空间,希望以后能配合的更好。

这两天剩下的时间做了一些作业,今晚抄物理实验报告抄到吐血。然后。。。题还没有总结。在这里写一下今天看到的求最长上升子序列和最长下降子序列的代码:

#include <iostream>#include <cstring>#include <algorithm>#include <stdio.h>using namespace std;int num[1000000];int dp[1000000];int main(){    int T,p,i;    scanf("%d",&T);    while(T--){        scanf("%d",&p);        for(i = 1; i <= p; i++)            scanf("%d",&num[i]);        dp[1] = num[1];        int length = 1;        for(i = 2; i <= p; i++){            if(num[i] > dp[length])                dp[++length] = num[i];            else{                int p = lower_bound(dp,dp + length,num[i]) - dp;                dp[p] = num[i];            }        }        printf("%d\n",length);    }    return 0;}