• 考试总结 模拟88


    T1做的比较顺利,性质整出来了,然后写了个dp 感觉很像87的T2,但是拿数据结构优化了半天没思路弃掉了

    T2题干很长,描述了游戏,最后看见求概率,以为是大神题,心里就有些抵触??然后就eooo先弃了

    接着看T3,心态比较炸,T1以为A的会不少,花了30min调整才真正开始思考

    写完next_permutation,想着跟上次的six的dfs有点像,但没改过,

    写了个dfs以为会拿到40分。。然后就发现复杂度算错了。。。

    还有20min看T2,5min后。。30分模拟送分??!!!14分钟写完,30s试样例??没过??然后绝望的交了WA0

    然后再看一眼题目,发现要输出属性值,加了几个字符就A了

    不能匆忙交题!!!!把会的先打上,一定要先看完题目

    T1「DP」「贪心」

    先sort一下

    可以证明最优的决策一定保证每个队列是连续的区间。

    如果将某段连续区间的某一项干到别的区间那么显然会使最终答案变差

    定义f[i][j]表示考虑到第i个人,且他是第j段区间的结尾,已经有了j段的最小值

    f[i][j]=min{f[k][j-1]+(a[i]-a[k+1])^2}

    可以发现本题的特殊之处在于只有6000个不同的身高

    于是unique直接AC

    注意特殊之处

    T3「记忆化搜索」

    可以发现最终结果跟种类无关,我们只关心有几个1,2,3(即要放的数量为1,2,3)

    那么定义f[i][j][k][x]表示当前状态还剩i个1,j个2,k个3要放,上一个放的那个球,在上一次的数量为x

    当前的ans大概就是当前放一个1/2/3之后的方案数之和,那么放一个2,就多一个1,少一个2

    1 ll dfs(int i,int j,int k,int x){
    2     if(!i&&!j&&!k)return 1;
    3     if(f[i][j][k][x]!=-1)return f[i][j][k][x];
    4     ll nw=0;
    5     if(i) nw+=(i-(x==2))*dfs(i-1,j,k,1);
    6     if(j) nw+=(j-(x==3))*dfs(i+1,j-1,k,2);
    7     if(k) nw+=(k-(x==4))*dfs(i,j+1,k-1,3);
    8     return f[i][j][k][x]=nw;
    9 }

    由于我们要保证相邻的小球颜色不能相同,所以记录x,看一下上一次放的是那种小球,这一次的那些小球中就不能放那一个所以-1

  • 相关阅读:
    机器学习系列-tensorflow-01-急切执行API
    Python3基础-代码阅读系列—优惠码生成
    英语口语练习系列-C01-好棒
    Python3基础系列——枚举类型大揭秘
    Python3字符串-最容易理解的方式
    英语词性系列-B02-动词
    专业方向系列-02-基于深度学习的诊断方法
    英语词性系列-B01-名词
    英语进阶系列-A06-本周总结
    Python数据可视化系列-02-pyecharts可视化非常cool
  • 原文地址:https://www.cnblogs.com/casun547/p/11743659.html
Copyright © 2020-2023  润新知