![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
这个名字真好听
从事机器学习研究工作
展开
-
二叉搜索树BST实现(c++语言)
数据结构原创 2022-09-10 19:34:33 · 260 阅读 · 1 评论 -
leetcode-741. 摘樱桃
首先介绍一下贪心的思路,每次都取最优解。对于第一条路径来说,记录一下最优路径,接着将最优路径上的樱桃重置为0. 然后再利用一次贪心的思路。当然贪心思想是错误的int func(vector<vector<int>>& grid, vector<vector<int>>& dp){ int m = grid.size(); int n = grid[0].size(); int sum = grid[0][0]; dp[0原创 2022-05-15 21:43:14 · 265 阅读 · 0 评论 -
面试题-动态规划
一开始想到了dp, 不过由于一些细节,没想通。结束后才想出来了。int sumSubarrayMins(int* arr, int arrSize){ int mod = 1e9 + 7; int n = arrSize; vector<int> dp1(n, 1); vector<int> dp2(n, 1); for (int i = 1; i < n; i++) { if (arr[i] < arr[i - 1])dp1[i] = ...原创 2022-05-10 16:16:51 · 169 阅读 · 0 评论 -
算法竞赛进阶指南- 月之谜
迭代版本,根据原书的题解编写。int func(int R){ int res = 0; vector<int> arr; int r = R; int N = 0;//确定R有N位 while (r){ N ++ ; int mod = r % 10; arr.push_back(mod); r /= 10; } vector<vector<vector<vector<int>>>> dp(6, vec原创 2022-05-09 11:09:16 · 161 阅读 · 0 评论 -
算法竞赛进阶指南- A Decorative Fence
void func1(int n,int &c){ int dp[21][21][2] = { { { 0 } } }; dp[1][1][0] = dp[1][1][1] = 1; vector<int> used(21, 0); for (int i = 2; i <= 20; i++) { for (int j = 1; j <= i; j++) { for (int p = j; p <= i - 1; p++) { .原创 2022-05-07 20:53:34 · 349 阅读 · 0 评论 -
算法竞赛进阶指南- 炮兵阵地
bool isValid(int m,int n){ int cnt = 0; vector<int> one; while (cnt < n) { int tmp = m % 2; if (tmp == 1)one.push_back(cnt); m /= 2; cnt++; } int sz = one.size(); if (sz <= 1)return true; for (int i = 0; i < sz - 1; i++).原创 2022-05-01 17:50:53 · 271 阅读 · 0 评论 -
算法竞赛进阶指南- Mondriaans Dream
bool isvalid(int a, int b,int n){ int cnt = 0; int ct = 0;//连续的0 while (cnt < n) { int s = a % 2; int t = b % 2; if ((s | t) == 0)ct++; else{ if (ct % 2 != 0)return false; ct = 0; } a /= 2; b /= 2; cnt++; } if (ct % 2..原创 2022-04-30 18:34:02 · 375 阅读 · 0 评论 -
算法进阶指南-陪审团
int jury(vector<int> d,vector<int> p,int m){ const int N = 11, M = 410, delta = 200; int f[N][11][M],ans[N]; memset(f, -0x3f, sizeof f); int n = d.size(); f[0][0][delta] = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j <.原创 2022-04-26 15:51:43 · 139 阅读 · 0 评论 -
算法竞赛进阶指南- Cookies
bool cmp(int a,int b){ return a > b;}int func2(vector<int> &g, int m, int n){ if (g.size() != n)return -1; sort(g.begin(), g.end(), cmp); vector<vector<int>> dp(10, vector<int>(20, INT_MAX)); dp[0][0] = 0; for (i.原创 2022-04-22 17:37:43 · 129 阅读 · 0 评论 -
算法竞赛进阶指南- I-country
int func1(vector<vector<int>> &mat,int K){ int m = mat.size(); int n = mat[0].size(); int dp[4][9][3][3][2][2]; for (int i = 0; i <= m; i++)dp[i][0][0][0][1][0] = 0; for (int i = 1; i <= m; i++) { for (int j = 0; j < m..原创 2022-04-22 17:00:25 · 168 阅读 · 0 评论 -
算法竞赛进阶指南-传纸条
int func(vector<vector<int>> &mat){ int m = mat.size(); int n = mat[0].size(); //int dp[][][]; vector<vector<vector<int>>> dp(m + n, vector<vector<int>>(m+1, vector<int>(m+1, INT_MIN))); dp[0].原创 2022-04-22 15:43:21 · 88 阅读 · 0 评论 -
最长单调不下降子序列的长度
int func1(vector<int> a){ int m = a.size(); vector<int> dp(m + 1, 1); int mx = 0; for (int i = 2; i <= m; i++) { for (int k = 1; k < i; k++) { if (a[k - 1] <= a[i - 1]) dp[i] = max(dp[i], dp[k] + 1); mx = max(mx, .原创 2022-04-21 08:30:45 · 170 阅读 · 0 评论 -
算法竞赛进阶指南- Making the grade
int func(vector<int> a){ int m = a.size(); vector<int> b = a; sort(b.begin(), b.end()); vector<vector<int>> dp(m + 1, vector<int>(m + 1, 10001)); for (int i = 0; i <= m; i++){ dp[0][i] = 0; } for (int i = 1; ...原创 2022-04-20 17:59:35 · 135 阅读 · 0 评论 -
算法进阶-最长公共上升子序列
int lcis(vector<int> &a, vector<int> &b){ int m = a.size(); int n = b.size(); vector<vector<int>> dp(m+1, vector<int>(n+1,0)); int mx = 0; for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++)...原创 2022-04-20 11:09:56 · 223 阅读 · 0 评论 -
蓝书-算法竞赛进阶指南-Running Median 对顶堆
vector<int> func(vector<int> &arr){ priority_queue<int> small; //- priority_queue<int> big; int m = arr.size(); vector<int> res; for (int i = 1; i <= m; i++) { if (small.size() == 0 || -arr[i - 1] < small..原创 2022-03-24 14:00:57 · 136 阅读 · 0 评论 -
算法进阶-蓝书-起床困难症
int calc(vector<vector<int>> vec, int bt, int base){ int res = base; for (int i = 0; i < vec.size(); i++) { int op = vec[i][0]; int para = vec[i][1]>>bt; if (op == 0)res &= para; else if (op == 1)res |= para; els...原创 2022-03-20 18:21:25 · 155 阅读 · 0 评论 -
费解的开关
算法进阶:int bitCntOne(int m){ int cnt = 0; while (m != 0){ cnt++; m -= m&(-m); } return cnt;}int lowbit(int m){ return m&(-m);}bool recur(vector<vector<int>> &mat, int row, int cnt, vector<int> &res).原创 2022-03-16 20:37:44 · 190 阅读 · 0 评论 -
求整数二进制位为1的个数
使用lowbit算法int bitCntOne(int m){ int cnt = 0; while (m != 0){ cnt++; m -= m&(-m); } return cnt;}原创 2022-03-16 18:01:12 · 88 阅读 · 0 评论 -
计算hamilton距离
int hamilton(int n, vector<vector<int>> weight){ //计算无向带权图,n个节点,从0到n-1。不重不漏经过所有点的最短距离 ///状态压缩 vector<vector<int>> dp(1 << n, vector<int>(n, 0)); dp[1][0] = 0; for (int i = 1; i < 1 << n; i++) { for (.原创 2022-03-14 13:20:50 · 335 阅读 · 0 评论 -
快速幂和大数相乘
int myPow(int a, int b, int p){ //求解a的b次方,结果对p取余 long long res = 1 % p; while (b) { if (b & 1)res = (long long)res*a%p; a = a*a%p; b = b >> 1; } return res;}int myMultiply(int a, int b, int p){ //求解a*b,结果对p取余 long long res =.原创 2022-03-14 12:37:04 · 108 阅读 · 0 评论 -
c++实现栈模板
模板类中,成员函数的声明和定义写在同一个文件中。头文件内容如下:#include <iostream>using namespace std;template<typename T>class Stack{public: Stack(); Stack(int capacity); ~Stack(); bool IsEmpty(); bool IsFull(); void ClearStack(); int Length(); //栈的元素个数 bool原创 2020-06-09 16:29:45 · 311 阅读 · 0 评论 -
c++实现栈
从原理上看,栈要比普通队列更简单一些。栈的头文件内容如下:class Stack{public: Stack(); Stack(int capacity); ~Stack(); bool IsEmpty(); bool IsFull(); void ClearStack(); int Length(); //栈的元素个数 bool Push(int element); bool Pop(int &ele); void StackTraverse();private:原创 2020-06-09 15:43:51 · 181 阅读 · 0 评论 -
c++实现环形队列
环形队列相对于普通队列有一定的好处。头文件的内容如下:#include <stdlib.h>class CircleQueue{public: CircleQueue(); CircleQueue(int capacity); ~CircleQueue(); bool IsEmpty(); bool IsFull(); void ClearQueue(); int Length(); bool EnQueue(int element); bool DeQueue(in原创 2020-06-09 14:51:13 · 984 阅读 · 0 评论