上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 29 下一页
摘要: 当尝试用和完全背包问题相似的思路试图来优化的时候,就会发现优化不了 用二进制优化 假设我们这件物品一共有1023个 我们真的需要从0到1到2一直枚举到1023吗 有没有一种更高效的方式来枚举呢 可以的 我们把若干个第i件物品打包在一起 打包成2的整次幂的形式 比如说10组 1, 2, 4, 8, . 阅读全文
posted @ 2020-07-02 15:07 kyk333 阅读(177) 评论(0) 推荐(0)
摘要: 多重背包问题是每个物品最多有s[i]个 多重背包问题有朴素版和优化版 dp[i][j]只从前i个物品中选,体积<=j的最大值 根据第i个物品选多少个来划分 三重循环的暴力做法 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int 阅读全文
posted @ 2020-07-02 14:13 kyk333 阅读(227) 评论(0) 推荐(0)
摘要: 完全背包问题是每件物品有无限个 完全背包问题的状态表示和01背包问题一样 dp[i][j]表示只看前i个物品,总体积<= j的最大价值 状态计算: 按照第i个物品选了多少个来分 然后综合起来就是 k是枚举的第i个物品的个数,k = 0, 1, 2,... 三层循环的二维做法 1 #include < 阅读全文
posted @ 2020-07-02 12:11 kyk333 阅读(183) 评论(0) 推荐(0)
摘要: 01背包问题是每件物品要么用0次,要么用1次,最多只用一次 dp[i][j]表示只从前i个物品中选,总体积<=j的选法的最大价值。 二维做法 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N = 1010; 4 int d 阅读全文
posted @ 2020-07-02 09:34 kyk333 阅读(158) 评论(0) 推荐(0)
摘要: 解题思路: 1:按区间左端点从小到大排序 2:遍历一遍。遍历的同时维护一个区间。 1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef pair<int, int> PII; 4 void merge(vector<PII> &seg 阅读全文
posted @ 2020-06-30 21:20 kyk333 阅读(155) 评论(0) 推荐(0)
摘要: 离散化,特指整数的离散化,保序的。 保序是指小的小,大的大。 值的范围比较大,但是个数比较少 值域很大,但是比较稀疏,我们用到的只是相对关系 排序去重后,这个数的下标就是这个数映射的值 将它们映射到从0开始的自然数 unique函数返回去重后数组的尾端点 然后把返回值和结尾中间的所有部分删掉 ret 阅读全文
posted @ 2020-06-30 16:34 kyk333 阅读(206) 评论(0) 推荐(0)
摘要: 位运算: 第一个操作。 n的二进制表示中第k位数字是几 这里的第k位指的是,从右往左第0位,第1位,第2位 1:先把第k位数字移到最后一位 n>>k 2:看个位是几 x&1 结合起来就是n>>k&1 第二个操作: lowbit操作 lowbit(x)的作用是返回x的最后一位1 比如x=1010,那么 阅读全文
posted @ 2020-06-30 14:42 kyk333 阅读(222) 评论(0) 推荐(0)
摘要: 暴力做法 优化: 两个数组都是单调上升的 测试一个样例 3 6 9 13 15 1 4 7 10 14 目标值是22 应该输出 4 2 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N = 100010; 4 int a[ 阅读全文
posted @ 2020-06-30 14:00 kyk333 阅读(207) 评论(0) 推荐(0)
摘要: 快排的划分,归并排序的归并,之后的kmp都是双指针算法。 双指针算法的两大类: 指向两个区间或指向一个区间 双指针算法一般是这样的 双指针算法运用了某些单调性质,可以将暴力的O(n^2)优化到O(n) 先来一个小的问题热身,输入一行若干个用空格隔开的单词,然后依次每行输出一个单词。具体应用看这里ht 阅读全文
posted @ 2020-06-30 10:14 kyk333 阅读(428) 评论(1) 推荐(0)
摘要: 二维差分 原数组a[i][j] 差分数组b[i][j] 使得a数组是b数组的前缀和 同样开始时假定a[i][j]和b[i][j]都等于0 然后对于a数组中的每一个数再插一遍就好了 一维差分是对一段加上一个值 二维差分是对一个子矩阵加上一个值 b[x1][y1]加上c就是x1,y1右下角的所有点加上c 阅读全文
posted @ 2020-06-29 12:43 kyk333 阅读(1033) 评论(1) 推荐(1)
上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 29 下一页