12 2018 档案
摘要:好了今年最后一天,写一个博客好了. 先说题: 首先我们打开计算器调到程序员来模拟一下样例: 题意就是对于这个数n如何加上一个新数后使得二进制下的新数1的数量小于等于k 考虑贪心,设答案是ans,为了让ans最小当然要使得新数最小.每次必须要往上加,那答案应该是把第k个1和之后的1都弄掉,换成这样子:
阅读全文
摘要:这题看起来长得就很像某些dfs例题,但是n=1000也太大了. 考虑怎么来搞这道题呢?注意到A处理完后B才开始处理,是否最优解一定是让A快速处理完一个物品后让B开始处理? 我们把物品分为两类:A>B的和B>A的.一定是先处理A<B的再开始处理A>B的.这样可以让A对于B>A的物品更多的缓冲时间.具体
阅读全文
摘要:当时有人说: 于是去看了一眼,觉得动归很可写啊,于是写了写转移发现不太能直接转移,因为异或不一定是加还是减,滚动数组不好搞.于是算了算2^100也才六万多,完全可以开E*2^B的数组保存状态. 借用c++自带的^运算就写成了这样子 然后发现自己日常读错题:人家首先要求要从已有的数开始异或.而且至少运
阅读全文
摘要:也要提供一下原题面: 一句话题意:找长为5的lis的方案数. 考虑到长度只有5,可以写五个树状数组维护记录长为1,2,3,4,5时最后一个元素小于i的方案数sum(i).对于数a[i],先查长为1的数里小于a[i]的方案数.如果为0就算了,否则把这些方案数加到长为2的树状数组里.一直进行这样的操作即
阅读全文
摘要:首先理解题意。一句话翻译就是:给出长为m的数列求长为n的字典序最大不下降子序列。 看到只有两个人过,看似很难,实际上。。确实很难,从夏天见到的这个题就开始想并得到了一个错误算法,想了好长时间。 首先二分求lis应该都会吧。首先处理出以每个点为起点的最长不下降序列长度len,考虑对于第i个元素我们要找
阅读全文