• Codeforces Round #384(div 2)


    A

    题意:有n个机场处于一直线上,可两两到达,每个机场只可能属于两家公司中的一家(用0,1表示),现在要从a机场到b机场,可任意次转机。若机场i与机场j从属同一公司,则费用为0,否则费用为1。问最小费用?

    分析:题目看懂就行了,起点和终点相同答案就是0,否则就是1

    B

    题意:和Wannafly Union Goodbye 2016的B题十分类似,分治搞

    C

    题意:求x,y,z使得对于给定的n(1n10^4) 2/n=1/x+1/y+1/z成立

    分析:数学

      目标是把2/n裂成3项

      2/n=1/n+1/n

         =1/n+(n+1)/(n*(n+1))

         =1/n+1/(n+1)+1/[n*(n+1)]

      注意n=1时候无解

    D

    题意:有根树以1为根节点,问如何选择两个不同的节点i和j,使得两棵子树不相交,同时两子树上的节点val和最大?

    分析:树形dp

      先跑一遍dfs,算出每个节点的sum[i],顺便求出f[i]表示以i为根的子树中,sum[k]最大的那个小子树的sum值

      然后再跑一遍dfs,由底向上算出每个节点k内的最大答案,具体的就是对于k的所有儿子,取f[u]最大的两个更新答案

    E

    题意:给你n个数(n<=1000),它们都是1~8,选出一个最长的序列使得该序列满足两个条件:1、所有相同的数字必须连续出现 2、设sum[i]为数字i出现的个数,要求任意i,j,abs(sum[i]-sum[j])<=1

    分析:二分答案+状压DP

      可以先二分len表示每个数字出现次数的最小值,那么每个数字出现次数为len或者len+1

      预处理出last[i][j]表示从位置i往前,连续j个数字a[i],到位置last[i][j]为止

      f[i][j][k]表示[前i个数,状态为j(0~2^8-1表示每个数字是否取过),有k个len+1 ]这种情况是否存在

      转移的时候有三种,一种是i直接由i-1转移得到,第二种是i向前len,第三种是i向前len-1

      最后刷一遍统计最大值

      还有注意特判n=1,以及二分出来的l(有可能l没有check就退出二分了)

      细节比较多,调了很久,debug能力和全面考虑问题还有待提高

      

  • 相关阅读:
    AJAX 类似电子表格的功能实现(续采购授权系统)
    Asp.net 程序优化
    Sql server 性能优化
    LinqToSql查询
    LInqToSql 增删改
    LinqToXml(删除某节点)
    LinqTo数组和cast,typeof的用法
    ThreadPool
    C# 定时器定时更新
    linqToXml查询
  • 原文地址:https://www.cnblogs.com/wmrv587/p/6257496.html
Copyright © 2020-2023  润新知