1.注意:入队元素1--n,往往要从0开始添加到n+1,以方便计算上1和n的情况 有负数求最大值,初始化dp方程负无穷 dp方程有多种列法,要懂得转换思路, 草坪(D),f[i][j]既可以表示到i牛已连续修建了j个牛的最值,也可以是到i牛不包含他的最值,第二种就方便列转移(第一一种应该也可以) const int N=10000
目录题目描述简单模拟分析代码时间复杂度参考文章 题目传送门 题目描述 简单模拟 分析 代码 #include<iostream> #include<cstdio> #include<algorithm> #include<vector> using namespace std; typedef pair<int, int> PII; const int N = 1010; vector<PII> people[30]; i
倒序输出时,i不能=maxn ,这是越界访问了,最大从maxn-1开始 #include<iostream> #include<cstdio> using namespace std; const int maxn = 1000; int main() { int p[maxn] = { 0 }, A[maxn] = { 0 },e,x; while (scanf("%d%d", &x, &e) != EOF) { A[e] = x;
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> //三个数按从大到小的输出 int main() { int a = 0; int b = 0; int c = 0; printf("请输入三个数:"); scanf("%d%d%d", &a, &b, &c); if (a<b) { int x = a; a = b; b = x; }
原题链接 来自洛谷https://www.luogu.com.cn/problem/P1563 #include <bits/stdc++.h> using namespace std; char name[100100][12]; int fward[100100]; int main() { int i, j, t; int n, m; scanf("%d%d", &n, &m); for (i = 0; i < n; i++)
最短路 单源最短路 Dijkstra算法 边权非负 # include <bits/stdc++.h>using namespace std;typedef long long LL;struct Dijkstra{ #define MAXN 1234 #define INF 0x3f3f3f3f int n,m,s,t; int dis[MAXN],M[MAXN][MAXN]; bool vis[MAXN]; voi
目录题目描述输入格式输出格式数据范围输入样例:输出样例:图的链表存储+ bfs算法求解分析图的链表存储图的邻接矩阵存储代码时间复杂度参考文章 题目描述 给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环。 所有边的长度都是 1,点的编号为 1∼n。 请你求出 1 号点到 n 号点的
#include <bits/stdc++.h> #define x first #define y second #define LL long long #define PII pair<int, int> using namespace std; const int N = 510; int n, l, m; PII a[N]; LL f[N][N]; int main() { scanf("%d%d%d", &n, &l, &am
Prim 与dijistra比较像,分为朴素版和堆优化版。 朴素版Prim,时间复杂度O(n^2),一般用于稠密图。 算法流程:初始化距离矩阵为0x3f3f3f3f. 循环n次,找到距离集合最短的点t,用t更新其他点到集合的距离。 注意:与dijistra不同的在与距离的更新方式。 Prim最小生成树 #include<algorithm>
题目 题意:给定一个 n ∗ m n*m n∗m的矩阵,初始无色,有k种颜色,q个操作。每次操作选择位置
https://www.luogu.com.cn/problem/P4292 感觉长链剖分的难点在于指针的使用 具体实现看代码吧,关于每往上继承一个要加一条边的权值,可以利用差分的思想 code: #include<bits/stdc++.h> #define N 500050 #define db double #define ll long long using namespace std; struct edg
题目 分析 考虑每种情况的方案数平方之和,可以被转换成有两个人同时独立进行该游戏,问最后情况相同的方案数。 那么设 \(dp[i][j][k][o]\) 表示第一个人在上管道拿了 \(i\) 个,下管道拿了 \(j\) 个,第二个人上管道拿了 \(k\) 个,下管道拿了 \(o\) 个且操作情况相同的方案数。 可以发现
前不久做了一道同样出处的题,然后发现这道也做了,居然还是黑题(很好写,但思路我想不到),就花了20分钟回顾了一下 题意:有n种蔬菜,每种都有,\(a_i,s_i,c_i,d_i\)分别表示卖出去一单位的价钱,第一次卖额外得的价钱,初始有多少单位,每天结束时腐烂的单位(最后一天腐烂\(c_i\)%\(d_i\))Q个询问问
将过程逆序,问题即转换为以下形式—— 从$(a,b,c)$出发,每步移动到周围六个格子之一,求$d$步内不离开长方体的方案数 显然每一维可以通过生成函数合并,不妨仅考虑其中一维,问题也即 从$(0,a)$出发,每步移动到右上/右下的格子,$\forall 0\le i\le d$求$i$步内与$y=0,n+1$不交的方案数
P2617 #include<cstdio> #include<vector> #include<iostream> #include<algorithm> using namespace std; const int MAXN=1e5+5; int n,m,Ans[MAXN<<2],cg[MAXN<<2],tot,va[MAXN<<2],b[MAXN<<2],c1; struct SG{ int l,r,s
#include<stdio.h> int main(){ int a,b,c,d; char f; //f表示符号 int s; //s表示结果; printf("随机输入一个A+B形式的四则运算"); scanf("%d%c%d",&a,&f,&b
1. 贝尔福特曼 #include<iostream> using namespace std; #include<cstring> #include<cstdio> struct edge { int s, e, v; //起点,终点,边权 }; edge edg[200005]; //存储两次 int n, m, s, ans[100005], cnt; void add_edge(int a, int b, int c) { edg[cnt].s = a;
1 #include<iostream> 2 #include<cstdio> 3 #include<vector> 4 #include<cstring> 5 #define ls (x<<1) 6 #define rs (x<<1|1) 7 using namespace std; 8 const int N=1e5+5; 9 int sum[N<<2],tag[N<<2]; 10 int
题目链接:激光炸弹 题目分析: 0.二维前缀和。 1.参考蓝书22页。 code: #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N = 5010; int s[N][N];//前缀和矩阵 int n, m; int main() { int cnt, R; scanf("%d%d", &
前缀和 概念练习题 算法基础 概念 前言 对于一个数组,为了快速求 [L,R]内的和,引入前缀和概念,求静态数组内的和 前缀和:从第一个数 到 当前位置 的 总和 普通数组 S0 = 0 S1 = a1; Sn = a1 + a2 + … + an; 前缀和数组 :开一个数组专门记录前缀和 Si = Si-1 + ai 因
题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 小明的作业本上有道思考题: 看下面的算式: (□□□□-□□□□)*□□=900 其中的小方块代表 00 ~ 99 的数字,这 1010 个方块刚好包含了 00 ~ 99 中的所有数字。 注意:00 不能作为某个数字的首
求一元二次方程ax2+bx+c=0的解。 (考虑b2-4ac三种情况) 提示:如输入abc的值分别为1 2 1,输出x1=x2=-1.00;输入1 5 6,输出x1=-2.00,x2=-3.00;输入3 4 5 ,输出“无实数解!”。 输入格式: 输入三个整数。 输出格式: 输出方程解的情况。 输入样例: 在这里给出一组输入。例如: 1 5 6 输出样例
《算法设计入门经典》 P7 例题1-3 交换变量 题目: 输入两个整数a和b,交换二者的值,然后输出。 #include<stdio.h> int main() { int a, b, t; scanf("%d%d", &a, &b); t = a; a = b; b = t; printf("%d %d\n", a, b); return 0; } #include&
《算法竞赛入门经典》 P6 例题1-2 三位数反转 题目: 输入一个三位数,分离出它的百位、十位和个位,反转后输出。 #include<stdio.h> int main() { int n; scanf("%d",&n); printf("%d%d%d\n",n%10,n/10%10,n/100); return 0; }
文章目录 蓝桥杯备赛--AcWing 668. 游戏时间2lanqiao备赛系列说明题目题目描述输入格式输出格式数据范围 下面进行解法思路的详解(这里提供三种思路及解决方案)一、直接按照时间属性进行讨论(最复杂考虑的情况最多)1. 思路2. 图示分析3. 实现代码(C++) 二、直接把时间问题