动态规划
动态规划递归关系 状态表示f[i,j] 集合:从前i个物品选且体积小于j 属性:最大值,最小代价,数量 状态计算——集合划分 01 背包 每件物品可以用一次 不包含第i个物品:f(i - 1, j) 包含第i个物品:f(i - 1,j - vi) + wi 空余一个vi的位置,加上第i个物品的权重 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647#include <algorithm>#include <iostream>using namespace std;const int N = 1010;int n, m;int v[N], w[N]; //体积和价值int f[N][N]; //第一个N表示取第1~n个物品,第二个n表示从1开始到m的容量int main() { cin >> n >> m; for (int i = 1; i <= n; i++) ...
洛谷题单——图的基本应用
P5318 【深基18.例3】查找文献 这题是分别进行DFS和BFS遍历,要求有多个节点时,按照从小到大进行排序。由于采用的是yxc的链式前向星存储,涉及到多个数组,不知道该如何在输入后立即进行排序。因此第一次我多次在遍历过程中使用set来进行排序。功能正确但是会超时。 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273#include <cstring>#include <iostream>#include <queue>#include <set>using namespace std;const int N = 1e5 + 5;int n, m;int h[N], e[N], ne[N], idx = 0;bool st[N]; // 标记数组void add(int a, int b) { ...
洛谷题单——模拟与高精度
[toc] P1042 [NOIP2003 普及组] 乒乓球 这题我刚开始一直无法理解直到分差大于或者等于 22,才一局结束。后面一想,这不就是加球吗?那么,这题就好解了。 1234567891011121314151617181920212223242526272829303132333435#include <iostream>#include <string>using namespace std;void judge(const string& arr, int n) { int me = 0, em = 0; for (char ch : arr) { if (ch == 'W') me++; else em++; if ((me >= n || em >= n) && abs(me - em) >= 2) { //记得要加abs取绝对值 cout << me...
洛谷题单——字符串
P5733 【深基6.例1】自动修正 123456789101112131415#include <iostream>#include<string>using namespace std;int main(){ string a; getline(cin, a); for (char& tmp : a) { tmp = toupper(tmp); } cout << a;} P1914 小书童——凯撒密码 123456789101112131415161718#include <iostream>#include<string>using namespace std;int main(){ string a; int mv; cin >> mv; cin.ignore(); getline(cin, a); for (char& tmp : a) { tmp =(tmp - 'a' + mv)%26 +...
TinyWebServer epoll&&webserver
epoll&&webserverepollI/O多路复用I/O多路复用(I/O Multiplexing)是一种允许单个线程或进程同时监视多个文件描述符(通常是网络套接字)的可读、可写和异常等事件的技术。 IO多路复用——深入浅出理解select、poll、epoll的实现 - 知乎 (zhihu.com) 当然,我们在这里使用的是最现代,最高效的epoll系统调用。 在Linux系统中,当需要处理多个文件描述符时,epoll可以用来监控这些文件描述符的读写事件。当至少一个文件描述符准备好进行I/O操作时,epoll会通知应用程序,从而允许程序执行非阻塞的I/O操作。 12345678910111213141516171819202122/* * epoll_data_t 是一个联合体,用于存储 epoll_event 结构体中的用户数据。 * 它可以存储指针 ptr、文件描述符 fd、32位整数 u32 或 64位整数 u64。 */typedef union epoll_data{ void *ptr; /* 指针类型...
TinyWebServer http
httphttp报文结构我们可以通过burpsuite来抓取http请求,然后根据请求编写处理程序。 这是申请登录的请求 12345678910111213141516171819POST /login HTTP/1.1 //请求行/* 请求头部Host: localhost:1316User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateContent-Type:...
TinyWebServer HeapTimer
heap8.1 堆 - Hello 算法 (hello-algo.com) 这里使用小根堆来实现计时器。 时间堆通常用于优先队列(priority queue)的实现,其中每个元素都包含一个时间戳,并且堆的根节点总是具有最小时间戳的元素。 当剩余时间耗尽时,执行任务。 heaptimer.h12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667#ifndef HEAP_TIMER_H#define HEAP_TIMER_H#include <cstddef>#include <queue>#include <unordered_map>#include <algorithm>#include <chrono>#include <functional>#include <arpa/inet.h>...
TinyWebServer pool
pool包括了sql连接池和执行任务的线程池。 SqlConnRAII这里使用RAII来管理和获取pool池资源,使得在构造时获取资源,在析构时释放资源。 12345678910111213141516171819202122232425262728#ifndef SQLCONNRAII_H#define SQLCONNRAII_H#include "sqlconnpool.h"#include <cassert>#include <mysql/mysql.h>class SqlConnRAII {public: SqlConnRAII(MYSQL **sql, SqlConnPool *connPool) { assert(connPool); //不能直接将指针赋值给另一个指针,因为指针本身就是一个值,而不是一个引用。 *sql = connPool->GetConn(); sql_ = *sql; connpool_ = connPool; } ...
TinyWebServer Log
Log日志系统是各大项目的基石,可以帮我们进行调试、错误定位。当然,看着日志系统产生一行行输出也是一种享受。 今天发现代码补全有点问题,经过一番搜索,发现在wsl2上使用clangd比自带的补全强多了,强推(虽然最后发现是模板写错了)! 阻塞队列 同步变量: 线程在某些条件得到满足之前挂起 notify_one:随机选择一个线程唤醒。 notify_all:唤醒所有在条件变量上等待的线程,可能会引起惊群效应。 互斥锁:防止多个线程同时访问共享资源。 C++11多线程之互斥量(mutex)与条件变量(condition_variable)_c++ 条件变量和互斥-CSDN博客 生产者消费者模型:生产者线程通过 push_back 和 push_front 向队列中添加元素,消费者线程通过 pop...
TinyWebServer概述
TinyWebServer趁着刚看完effectiveCpp,赶紧过来写个小项目,TinyWebServer作为众多Cpp后端开发者的项目,值得入门学习(PS:虽然现在cpp后端已经很少了)。但是我们仍然可以从该项目中学到c++项目体系结构,其中log类、连接池、缓冲区也是与其他cpp项目也有共通之处,当然网络编程的知识也是可以从中学到许多。 由于我电脑配置有点较低(主要是轻薄本内存不太够),而且这里我使用的是wsl2+vscode的组合,ps:听说大厂都是远程开发。 开始时间2024/5/1,预计完成时间2024/5/14。 2024/5/1 ~ 2024/5/2 完成Buffer 2024/5/3 ~ 2024/5/4 完成log 2024/5/4 ~ 2024/5/5 完成pool 2024/5/5 完成heap 2024/5/6 ~ 2024/5/10 完成 http 2024/5/12 ~ 2024/5/12 完成 webserver 2024/5/13 ~ 2024/5/14...