17.8.15B组总结

来源:互联网 发布:七月算法tensorflow 编辑:程序博客网 时间:2024/06/05 20:31

17.8.15B组总结

前言

今天比赛做的不好,就第一题a了,第四题调了两个小时还没用,才80,其他两题直接弃疗。。。

T1

这张图揭示了一切
一道很水的题,刚开始准备像某GMH一样码线段树,忽然看到n才100。呵呵,码暴力。
从小到大排序,在将高的与低的比较,n*n就过了。(以后千万不要想多,先看看数据再说话)。

T2

考试就码了接近的正解,可惜细节码错了,最重要的还是。。。没考虑到DP的后效性。
设f[i,j]表示到第i个点,下一次要跳j的最小代价,在每个点往前搞搞,往后搞搞,就好了。

    for (j=2;j<=n;j++)    {        for (i=j+1;i<=n;i++)        {            f[i][j]=min(f[i][j],f[i-j][j-1]+a[i]);        }        for (i=n-j;i>=1;i--)        {            f[i][j]=min(f[i][j],f[i+j][j]+a[i]);        }        ans=min(ans,f[n][j]);    }

T3

看起来很难的一道题,考试由于时间不够,只能打了个表,爆0。
对于今天的DP专题,我只能无语,后三题全是DP;不过机智的我聪明的避开了DP,直接在二分里暴力枚举大包装的个数,算出小包装,取min即可。
以下是二分过程

    int l=1,r=m,mid;        mid=(l+r)/2;    while (l<r)    {        if (pd(mid))        {            l=mid;            mid=(l+r+1)/2;        }        else        {            r=mid-1;            mid=(l+r+1)/2;          }    }

T4

比赛时胜于此题,也败于此题。首先,我码了两个小时,还没a,可是我的努力也没白费,有80分。
码出来还算得意吧,但DP推了我半天,也调了我半天。设f[i,j]表示到a第i位数,已确定的和为j的最小加号数。每次由前面的len(s)位推来(不大于s);,最后答案显然就是f[n,s];注意判断0(可以成为前导0)。

原创粉丝点击