![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
计蒜客
xiu_cs
所有博客仅作为个人笔记用,内容写的乱七八糟,不要参考
Do what you want to do.
展开
-
八皇后问题 dfs
要点:将 对角线、列用数组进行标记,加快搜索速度#include<iostream>#include<stdio.h>using namespace std;int Max = 0;int m[9][9];bool A[20] = {false};//右上左下 bool B[20] = {false};//左上右下bool C[20] = {false};//列 void dfs(int deep,int S){ if(deep==8){ if(S>Ma原创 2020-06-25 09:55:13 · 227 阅读 · 0 评论 -
计蒜客 正方形 dfs剪枝
要点:记得剪枝呀!!!当满足条件时候设置flag = true, 当其他分支发现flag = true时,结束该分枝。#include<iostream>#include<string.h>#include<stdio.h>#include<algorithm>using namespace std;int n;int p[5];//定义4个桶 int sum = 0;int len;int A[10010];int t;bool f原创 2020-06-25 09:21:34 · 244 阅读 · 0 评论 -
计蒜客 等边三角形 dfs
注意:如果某条边的长度过大,停止对这个分支的搜索,这一个过程称为剪枝。#include<iostream>#include<stdio.h>#include<string.h>using namespace std;int n;int sum = 0; bool flag = false;int len[30];int barrel[4];void dfs(int index){ if(flag==true){ return; } if(i原创 2020-06-23 23:24:56 · 288 阅读 · 0 评论 -
计蒜客 方程的解数 dfs
Bug记录:在解题时候,数组范围没开够(少1位),虽然在本地表面上可以Ac,但在计蒜客终端上无法正确运行。当下标从1开始时,数组范围也要记得要开够啊!!!#include<iostream>#include<stdio.h>using namespace std;int n,m;int ans = 0;int p[5][2];int mem[151][5];void pre(){ for(int i=1;i<=m;i++){ for(int j=1;j&原创 2020-06-23 16:06:18 · 155 阅读 · 0 评论 -
计蒜客 买书 dfs剪枝
#include<iostream>#include<stdio.h>using namespace std;int m,n,k;int p[30];bool flag = false;void dfs(int money,int num,int index){ if(num==k&&money==0){ flag = true; return ; } if(flag||num>k||index>n){ return; }原创 2020-06-22 17:22:18 · 165 阅读 · 0 评论 -
计蒜客 蒜头君回家 BFS
#include<iostream>#include<queue>#include<stdio.h>#include<string.h>using namespace std;int n,m;char Map[2010][2010];bool inq1[2010][2010] = {false};bool inq2[2010][2010] = {false};int X[4] = {0,0,-1,1};int Y[4] = {1,-1,0,原创 2020-06-22 03:25:15 · 219 阅读 · 0 评论 -
计蒜客 一维坐标的移动 BFS
#include<iostream>#include<queue>using namespace std;int n,A,B;struct node{ int v; int deep;}Node;bool inq[5010] ={false};int ans = 0;void BFS(int A){ queue<node> q; Node.v = A; Node.deep = 0; q.push(Node); while(!q.empty()原创 2020-06-21 00:26:54 · 324 阅读 · 0 评论 -
计蒜客 走迷宫2 BFS
#include<iostream>#include<cstdio>#include<stdio.h>#include<algorithm>#include<string.h>#include<queue>using namespace std;const int maxn = 110;struct node{ int x,y; int deep;}Node;int X[4] = {0,0,1,-1};int原创 2020-06-20 23:57:30 · 693 阅读 · 0 评论 -
蒜头跳木桩——LIS
#include<bits/stdc++.h> using namespace std;int a[1010];int dp[1010];//求最长下降子序列 int main(){ int n; cin>>n; memset(a,0,sizeof(a)); memset(dp,0,sizeof(dp)); for(int i=0;i<n;i++...原创 2020-04-08 17:48:29 · 166 阅读 · 0 评论 -
多重背包问题(二进制拆分)
多重背包问题描述: 有NNN种物品,第iii种物品的体积是cic_ici,价值是wiw_iwi,每种物品的数量都是有限的,为nin_ini。现有容量为VVV的背包,求在总体积不超过VVV的条件下,使得背包的总价值最大。朴素算法: 将第iii类物品的nin_ini个物品拆分,得Σni\Sigma{n_i}Σni个物品,即将原问题转换为了01背包问题,时间复杂度为O(V×Σn)O(...原创 2020-03-16 01:26:35 · 1463 阅读 · 0 评论 -
蒜头君的购物袋3——完全背包
要点: 保证用较小容量的最大价值去更新较大容量的最大价值,不重不漏。//V 最大容量//w[i] 第i件物品的重量//v[i] 第i件物品的价值for(int i=1;;i++){ for(int j=w[i];j<=V;j++){ dp[j]=max(dp[j-w[i]]+v[i],dp[j]); }}时间复杂度: O(N∗V)O(N*V)O(N∗V)空间复杂度...原创 2020-03-15 22:36:55 · 108 阅读 · 0 评论 -
蒜头君的购物袋2——01背包(经典)
法一 二维数组:时间复杂度: O(N∗V)O(N*V)O(N∗V)空间复杂度: O(N∗V)O(N*V)O(N∗V)#include<bits/stdc++.h> using namespace std;int v[101];int p[101];int dp[101][1010];int main(){ int V,n; cin>>V>>...原创 2020-03-15 21:46:53 · 163 阅读 · 0 评论 -
蒜头君的购物袋1——01背包
#include<bits/stdc++.h> using namespace std;int v[31];int dp[20001];int main(){ int V,n; cin>>V>>n; memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++){ cin>>v[i]; } ...原创 2020-03-15 21:26:56 · 110 阅读 · 0 评论 -
蒜头君的新游戏-递推
思路:关键在于找到递推规律. 如果第m次传递后娃娃在同事A手上,那么在第m-1次传递后,娃娃应该在A的左右邻居手上,第m-2次传递后,娃娃应该在A的左右邻居的邻居的手上… 如果第一次传递时,娃娃在A手上,那传递后,娃娃在A的左右邻居手上,第二次传递后,娃娃在A的左右邻居的邻居的手上…#include<bits/stdc++.h>using namespace std;in...原创 2020-03-13 11:25:51 · 238 阅读 · 0 评论 -
逃生 计蒜客-动态规划基础
个人小结: 代码虽长,但核心思想不难,基础的动态规划问题。提交后6个样例里通过了5个,觉得算法应该没问题的。找了一上午都没发现问题原因。最后还是将所有数据全部打印出来,才发现在for循环这里出了大问题。 是在处理右下块的时候误将for(int i=x+1;i<=n;i++)写成了for(int i=x+1;i>=1;i–),不仅右下角...原创 2020-03-06 13:37:38 · 239 阅读 · 0 评论 -
捡水果 动态规划入门
#include<bits/stdc++.h>using namespace std;long long int r[1001][1001];long long int dp[1001][1001];int main(){ int n; cin>>n; for(int i=1;i<=n;i++){ for(int j=1;j<=i;j++){...原创 2020-03-05 16:27:13 · 484 阅读 · 0 评论 -
杨辉三角 递推
#include<bits/stdc++.h>using namespace std;long long int r[51][51];int main(){ int n,m; cin>>n>>m; for(int i=1;i<=n;i++){ r[i][1]=1; r[i][i]=1; for(int j=2;j<i;j++)...原创 2020-03-03 23:29:30 · 467 阅读 · 0 评论 -
墙壁涂色 递推
要点:#include<bits/stdc++.h>using namespace std;long long int ans[51];int main(){ int n; cin>>n; ans[1]=3; ans[2]=6; ans[3]= 6; for(int i=4;i<=n;i++) { ans[i] = ans[i-1]+2*ans...原创 2020-03-03 23:20:48 · 271 阅读 · 0 评论 -
马踏过河卒 动态规划基础-递推
注意:答案可能过大,超过int数据类型的范围,需要使用long long int 数据类型。#include<bits/stdc++.h>using namespace std;long long int l[21][21];int main(){ int n,m,cx,cy; memset(l,0,sizeof(l)); l[0][0]=1; cin>>...原创 2020-03-03 22:23:35 · 291 阅读 · 0 评论 -
购买物品 ——鸽巢原理
答案不唯一参考:鸽巢原理代码参考#include<bits/stdc++.h>using namespace std;int p[100001];int pre[100001];//前n位同事捐款总额 int r[100001];// 记录当对n取模值不为0时的数值 void print(int a, int b){ int num= b -a +1; cout&...原创 2020-03-02 20:35:27 · 123 阅读 · 0 评论 -
蒜头君走迷宫 组合计数
关键:用公式inv[i]=(mod−mod/i)inv[mod%i]%modinv[i] = (mod-mod/i)inv[mod\% i]\%modinv[i]=(mod−mod/i)inv[mod%i]%mod来线性预处理逆元。#include<bits/stdc++.h>using namespace std;const long long int mod = 1e9 +...原创 2020-03-02 18:56:20 · 373 阅读 · 0 评论 -
吃辣椒
要点:对每个数考虑以它作为最大值的集合个数。对每个pi统计数组中比他小的数,从这些数中选k-1个组成的k个数中pi最大,可视为这个pi值对答案的贡献。即:最大值C(N-1)(k-1)+次大值C(N-2)(k-1)…#include <iostream>#include <bits/stdc++.h>using namespace std;const int ma...原创 2020-02-28 12:07:05 · 244 阅读 · 0 评论 -
蒜头君的多项式
#include <iostream>#include <bits/stdc++.h>using namespace std;int C[1001][1001];int mod = 10007;void init(){ for(int i=0;i<=1000;i++){ C[i][0]=1; C[i][i]=1; } for(int i=2;i...原创 2020-02-27 23:25:49 · 174 阅读 · 0 评论 -
计算集合的并 set
#include<iostream>#include<set>using namespace std;int main(){ int n,m; cin>>n>>m; set<int> A; set<int> B; for(int i=0;i<n;i++){ int t; ...原创 2019-10-28 11:16:56 · 117 阅读 · 0 评论 -
A*B 问题 大数 (计蒜客 快速提高代码能力)
using namespace std;const int MAX=1000;#include<bits/stdc++.h>int main(){ int a[MAX]; int b[MAX]; int sum[MAX]; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(sum,-1,sizeof(sum))...原创 2019-10-18 09:28:58 · 238 阅读 · 0 评论 -
四平方和 计蒜客
AC代码:法一:using namespace std;const double eps=1e-8;//判断浮点数相等应该用极小值eps来辅助,一般eps取1e-8足够了,确保比题目约定的精度误差要求更小。#include<bits/stdc++.h>int main(){ int N; cin>>N; int flag=0; f...原创 2019-10-18 09:26:59 · 133 阅读 · 0 评论 -
A+B问题(大整数类)计蒜客习题
问题描述计算两个非负整数A,B的和。不过这一次有些特殊A,B可能会很大。输入格式第一行输入一个非负整数A。第二行输入一个非负整数B。A,B的长度不大于 500。输出格式输出A+B的值。不要有多余的前导零。样例输入1231234样例输出1357时间限制:1000ms 内存限制:131072KAC代码using namespace std;...原创 2019-10-18 07:19:07 · 685 阅读 · 0 评论 -
计蒜客 网页跳转 解决cin/cout超时问题
在刷题的时候,经常会遇到超时的问题。算法没问题,将cin cout换成scanf printf便AC了,那 cin cout与scanf printf到底熟快熟慢??我看了这篇文章后豁然开朗,推荐:C++的输入输出 cin/cout和scanf/printf谁比较快?cin/cout速度超越scanf/printf的方法:大家习惯了C++ cin/cout输入输出风...原创 2019-11-01 19:44:04 · 533 阅读 · 0 评论 -
进制转换
坑:输入N可能为负数解决:判断N的正负值,若N为负值,输出“-”,再将N转换为正数,之后再进行后续处理。using namespace std; const int MAX=100000;#include<bits/stdc++.h>int main(){ int N,R; cin>>N>>R; int c=0; int A[M...原创 2019-10-21 22:06:08 · 295 阅读 · 0 评论 -
蒜头君学英语
注意:需要先将字符串的所有字母转换为小写字母后再做处理 (全部转换为大写字母也可)#include<iostream>#include<set>using namespace std;int main(){ int n; cin>>n; set<string> S; for(int i=0;i<n;i++){ int...原创 2019-10-28 11:47:09 · 109 阅读 · 0 评论 -
汉诺塔 计蒜客 递归
要点:1.输出时候递归函数和sum不要写在同一行。因为在加载到cout时候就已经为输出的sum赋值,使得最后输出的sum是最初始的值,没能将经过递归变化后正确的sum值输出。2.pow函数的值是一个double类型的数字,也就是说答案可能不是一个准确的整数。强制转化为long long int(int的范围不够)#include<iostream>#inc...原创 2019-11-03 17:00:59 · 156 阅读 · 0 评论