动态规划(简单DP)
1234567891011121314151617181920212223242526272829303132#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>using namespace std;const int N = 1005;int f[N][N], w[N][N];void solve(){ memset(f, 0, sizeof f); int r, c; cin >> r >> c; for(int i = 1;i <= r;i ++) for(int j = 1;j <= c;j ++) cin >> w[i][j]; f[1][1] = w[1][1]; for(int i = 1;i <= r;i ++) for(int j = 1;j < ...
第一题:模拟
代码:
1234567891011121314151617181920212223242526272829#include <iostream>using namespace std;const int N = 1010;int n, Q;int a[N][N], b[N][N], c[N][N];int main(){ scanf("%d%d", &n, &Q); int res = 0; while (Q --) { int x, y, z; scanf("%d%d%d", &x, &y, &z); a[x][y] ++; b[y][z] ++; c[x][z] ++; if (a[x][y] >= n) res ++; if (b[y][z] >= n) res ++; if (c[x][z] >= n) ...
滑动窗口
123456789101112131415161718192021222324252627282930313233343536373839404142#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#define x first#define y secondusing namespace std;const int N = 1e5 + 10;typedef pair<int, int> PII;int n, d, k;PII records[N];int cnt[N];bool st[N];int main(){ scanf("%d%d%d", &n, &d, &k); for(int i = 0;i < n;i ++) scanf("%d%d", &records[i].x, &records[i].y); ...
枚举题目:
代码:
123456789101112131415161718192021222324252627282930#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int N = 10010;const int INF = 100000000;int n, a[N];int main(){ cin >> n; for(int i = 1;i <= n;i ++) cin >> a[i]; int ans = 0; for(int i = 1;i <= n;i ++) { int min_v = INF, max_v = -INF; for(int j = i;j <= n;j ++) { min_v = min(min_ ...
三维BFS
一个三维数组的BFS搜索,参考下边代码即可
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#include <queue>using namespace std;const int N = 110; //上 下 右 左 后 前int dx[] = {0, 0, 1, -1, 0, 0};int dy[] = {0, 0, 0, 0, -1, 1};int dz[] = {1, -1,0, 0, 0, 0};struct ...
算法板子
12345678910111213141516171819202122232425262728293031323334353637#include <iostream>#include <cstdio>using namespace std;const int N = 1e8 + 9;int a[N], tmp[N];void merge_sort(int q[], int l, int r){ if(l >= r) return ; int mid = l + r >> 1; merge_sort(q, l, mid), merge_sort(q, mid + 1, r); int k = 1, i = l, j = mid + 1; while(i <= mid && j <= r) if(q[i] <= q[j]) tmp[k ++] = q[i ++]; else tmp[k ++] = q[j ++]; while(i <= mid) tmp[k ++] = ...
二分算法整数二分
和 y 总的模板一致,我们进行对二段性的分辨,然后看我们是要寻找什么值即可
12345678910111213141516171819202122232425262728293031323334#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>const int N = 2e5 + 9;int a[N], n, q;int bi_search(int x){ int l = 1, r = n; while(l < r) { int mid = l + r >> 1; if(a[mid] >= x) r = mid; else l = mid + 1; } if(a[l] == x) return l; else return -1;}int main(){ ...