• 2019.10.21刷题统计


    今天是在结束初赛后的第二天,也是我正式开始冲刺复赛的第一天。

    进入冲刺网站后的第一个任务是办完DP的题。

    第一题:1239

    这道题中提示已经非常充足了,但正是因为提示,我缺少了自己的思考(完全照提示的公式抄),导致多次错误。最终还是解决了这道题。

    AC代码:

     

    第二题:1240

    这道题也是给出了公式,套上原来模板(1238就相当于一个模板)即可。

    理论上记忆化搜索与普通DP时间复杂度相同,但实际上记忆化搜索会超时(不能相信提示)。

    超时代码:

     AC代码:

     第三题:1241

    这道题下面提示没给公式,但做完1238-1240三道题后,我已经可以在不看提示的情况下写出公式来了。

    如果设a[i]为第i颗珠子的头标记,a[i+1]为其尾标记,同时也是第i+1颗珠子的头标记,

    f[i][j]为将i到j合并成一颗珠子所获得的能量,

    则f[i][j]=f[i][k]+f[k+1][j]+a[i]*a[j+1]*a[k+1],其中i≤k<j。

    破环为链后a[i+n]=a[i],求的是f[i][i+n-1],其中1≤i≤n。

    AC代码:

     第四题:1242

    前面的题目都是复杂度为O(n3)的区间DP,这道题却是一个线性DP。

    我的思路:

    设f[i][j]表示电线杆i的高度为j时前i根电线杆的建设最少需要消耗的钱数,h表示最高的电线杆的高度

    则f[i][j]=min(f[i][j],f[i-1][k]+(j-h[i])2+c*abs(j-k)),其中h[i-1]≤k≤h

    边界条件:f[1][h[1]]=0,f[1][h[1]+n]=n2

    时间复杂度:

    外循环按顺序枚举每一根电线杆O(n),第二层循环枚举第i根的高度O(h),第三层循环分别使用第i-1根的h种高度更新第i根的钱数O(h),时间复杂度为O(nh2)。

    在这道题中O(nh2)的时间复杂度相当于1010级别,理论上通过不了。但由于数据太水还是通过了。

    代码:

  • 相关阅读:
    Python统计字符串中出现次数最多的人名
    初探CORBA组件化编程
    shell脚本—基础知识,变量
    Java多线程--线程交替
    Qt中采用多线程实现Socket编程
    Python字符串格式化--formate()的应用
    JAVA中浅复制与深复制
    Python这些问题你会吗?
    PHP控制反转(IOC)和依赖注入(DI
    Go 语言指针
  • 原文地址:https://www.cnblogs.com/wangximing/p/11716826.html
Copyright © 2020-2023  润新知