摘要:
这道题主要就是问你,长度为n的序列,有多少种上升的子序列 当前点的情况种数等于前面所有小于它的点的种数相加 + 1 1就是只有这一个点的时候的序列 那就是要多次查询前面比它小的点的种数的和 那么就是区间求和 用到树状数组就过了 一开始我用的a[k]表示这个点的值等于k时有多少种情况,但是后来考虑到对 阅读全文
2018年4月25日 #
摘要:
这个题给你一堆树,每棵树的位置x和高度h都给你 f[i]代表这棵树的位置排名,s[i]代表这棵树的高度排名 问你任意两棵树的(f[i] - f[j])*min(s[i],s[j])和 (f[i]-f[i-1])*min(s[i],s[i-1]) + (f[i]-f[i-2])*min(s[i],s[ 阅读全文
2018年4月23日 #
摘要:
主要就是每个位置x管理 x-lowbit(x)的长度 只要理解这句话就行了 树状数组主要用于区间查询和单点修改 所以用来求a[n]的数组中的k这个点,有多少个点比k这个点小 阅读全文
摘要:
这题,因为要统计之前有多少个数比当前的数小,所以我用的树状数组 基本代码就是这样,还是比较好想的,只不过我没想出来罢了 阅读全文
2018年4月20日 #
摘要:
这题主要是树形dp 思路就是01背包,小细节都写在代码里了 阅读全文
2018年4月18日 #
摘要:
输入n,m,l,s 差n的经验,m的忍耐度,l种怪兽,最多杀s只 输入a[i] b[i] 没杀一只i怪兽增加a[i]的经验,减少b[i]的忍耐度,每种怪兽有无限种 还差n的经验就能升级 问你升级时,最多还能剩多少的忍耐度 其实就是背包问题多加一个维度,还是很好想思路的 阅读全文
摘要:
当前所在位的最长上升子序列只和前面一个字符有关 } 阅读全文
2018年4月15日 #
摘要:
#include using namespace std; int nextr[100]; int main() { char str[100]; char ptr[100]; } void kmp(char *str,int n) { nextr[0]=-1; int k; k=0; for(int i=1;i-1 && str[k+1] !=... 阅读全文
2018年4月13日 #
摘要:
题目就是给你 n,m a1,a2......an c1,c2.......cn n种物品,第一种物品价值a1有c1个 问你能组合出多少种不超过m的价格 多重背包+二进制优化(脑补一下其实优化了好多时间啊) 其实不用分成完全背包和多重背包两部分也能过,我这个也是学别人的,之后试了一下不分开写的,也过了 阅读全文
摘要:
其实就是把一堆物品分块 分成1,2,4,8.。。。。。。 这样就可以组合成任意一个数 阅读全文