摘要:
我死了。。。被绿题虐。。。看来我的水平有待提高。。。QWQ 好吧,就是跑步的时候只能从跑步的状态转移过来 休息的时候可以从上一次休息时转移过来,也可以从某次跑步的时转移过来,需要枚举从哪一个状态转移来的 就是这样,可是我不会。 2019.04.28在明天考试前突然意识到自己是个渣渣+zz+菜的不行的 阅读全文
摘要:
我的天,,,,,n=8,k<=15,,,这怕不是暴力DP+高维数组。。。。 开一个五维数组f[k][i][j][p][q]表示从(i,j)到(p,q)中分成k个矩形最小的平方和。 然后初始化时用上二维前缀和 DP时有些像区间DP,枚举分割线,分成两部分,取min就好 第一次define for循环, 阅读全文
摘要:
要自下向上调整,尽可能用一个道具修改多个; 搜的时候记录叶节点的最大深度,减一下就好了。 2019.04.26 阅读全文
摘要:
背包。。。差不多。。QWQ 设f[i]为达到差值为i的状态需要多少次,那就很显然了; 注意区分正负不同的代价的循环方向 技巧:如果不想改负数的话,那可以移动一下数组下标,用一个新的指针指向原来的数组 2019.04.29 阅读全文
摘要:
又重构了一下。。。当然当初的题一看就看懂了QAQ 设f[i][j]表示以i为根的子树,有j个客户的最大收益 方程:f[u][j+k]=max(f[u][j+k],f[u][j]+f[v][k]-w(u,v)) 0<=j<=lastsize,0<=k<=v.size 2019.04.28 阅读全文
摘要:
刚才瞅了半天自己当初写的,终于瞅出来了。。。QWQ 设f[i][j]表示以i为根的子树,包含j个节点所需砍掉的最小边数 那么可知f[u][1]=u的度; 方程:f[u][j]=min(f[u][j],f[u][j-k]+f[v][k]-2); 为何减2? 因为你已经默认了把与自己相连的所有边都去掉了 阅读全文
摘要:
f[i][j]表示在第i个垃圾,高度为j的最大生命值 转移分三部分: 如果j>=当前垃圾的高度,且两个垃圾间的时间小于等于上一个状态f[i-1][j-a[i].v]的生命值,则可以垫高度 如果j>=当前垃圾的高度,且两个垃圾间的时间小于等于上一个状态f[i-1][j]的生命值,则可以吃 如果j<当前 阅读全文
摘要:
第一问求最长下降子序列,不提; 第二问:借鉴了最短路的方法??? 我们求出来了每个位置的最长下降子序列的长度,那么刻意这样这样转移 if f[i]==f[j]+1&&a[i]<a[j](i>j) 这代表f[i]可以由f[j]转移过来,所以 f[i]+=f[j] 但是会重复,所以当f[i]==f[j] 阅读全文
摘要:
复习复习DP。。。都忘了QAQ... 好了这道题我其实是看题解才会的。。。 方程 f[i]=min(f[i-j]+v[i]) v[i]表示i是不是石头 s<=j<=t 路径压缩引用一下证明From Luogu@Panda_Hu 2019.04.28 慌得一批QAQ 阅读全文
摘要:
据说某谷数据十分水。。。但幸好BZOJ上也过了。。。话说我记得讲课时讲的是奇奇怪怪的离散化。。但现在突然觉得什么都可以线段树瞎搞了。。。QAQ 直接就是这个区间有没有被覆盖,被覆盖直接return; 如果出现修改,那么就说明它能被看见,++ans 短的一批的线段树(去了不必要的操作码量还是很小的。。 阅读全文