背包问题及其优化
记忆化搜索
记忆化搜索不依赖于任何外部变量(外部变量即指定义于dfs函数外且值随dfs运行而改变的变量)
答案以返回值的形式存在,而不能以参数的形式存在
对于同一组参数,dfs的返回值是相同的
背包问题&单调队列优化
引例 C. Watching Fireworks is Fun
设fi,jf_{i,j}fi,j表示在放第i个烟花时,在位置j能获得最大的快乐值
状态转移方程 fi,j=max{fi−1,k+bi−∣ai−j∣}f_{i,j}=max \{ f_{i-1,k} +b_i-\lvert a_i-j \rvert \}fi,j=max{fi−1,k+bi−∣ai−j∣}
注意这里的k是有范围的 j−(ti−ti−1)×d≤k≤(ti−ti−1)×dj-(t_i-t_{i-1})\times d\le k \le (t_i-t_{i-1}) \times dj−(ti−ti−1)×d≤k≤(ti−ti−1)×d
最终式子化为 fi,j=max{fi−1,k−∣ai−j∣}+bi=max{fi−1,k}−∣ai−j∣+bif_{i,j}=max ...
致墨茶
你好呀墨茶。在知乎上看到你的消息的时候,我就已经很难过了。今天早上在b站上面翻了翻你动态,又哭的稀里哗啦的。
看到你做了四月是你的谎言的视频,相信你也一样被薰的故事打动了吧。薰让有马公生得到了救赎,而你对生活的执着,也许也会在不经意间帮助到和你一样遭遇的人们。
我肚子里没什么墨水,写不来太多话,但我还是想写下这一篇博客,就当是我这个陌生人对你的一点纪念吧
祝你在另一边过得快乐
高阶电路程序设计的初步尝试
源起
经过两次电路程序设计作业的洗礼——谁叫我这个憨憨不想用Matlab呢(逃),对python的掌握更进了一步,也对电路的求解有了更深的认识。索性就把第二次实验,即设计程序求解高阶电路的过程和思路搬到博客上来其实是因为老师说放在博客上会有额外的加分,也算是对这些天工作的一个小小的总结
框架
程序采用了python的tkinter库来实现可视化操作,虽然界面比较朴素,但也还算是勉强实现了人机交互的功能。然后在使用了matplotlib,numpy以及scipy实现微分方程的求解和作图
这次大作业算是对我们手下留情了,所有的高阶原件都在同一个支路中,所以可以直接使用戴维宁等效化简再求解即可,从而免去了设状态方程的过程(主要是python求解微分方程必须要化成标准方程的形式,这样的话会使得问题的难度成倍增大)。
这样一来,只要解决了等效电路的求解,问题就迎刃而解了
建立系数矩阵+高斯消元
将高阶原件所在的支路首尾端点连起来,建立一个含有假想的新元件的支路
首先将这条支路上的原件设为值为0的电流源,代入求解开路电压uoc
然后再将该原件变为值为1欧姆的电阻,代入求得电压u1
即可得到r ...
2020年12月11日凌晨随笔
终于连上我自己的服务器了,明天翘节离散去公安局备个案就大功告成了,wuhu~
我这个人其实不咋矫情的,但没想到停更这么久之后第一篇就是“深夜网抑云”,hh,也挺讽刺的吧
一
不知道为什么,最近几个月,开始莫名其妙变得很焦虑,很沮丧…甚至找不到什么特殊的理由,就是一直低落。
从进入大学以来,我差不多算是一事无成吧。
学习一团糟,天天忙自己所谓的梦想,却也只能当个云ACMer。
二
这两周天天摸鱼,我发现我真的好想保持这种的状态,一直打游戏睡觉,累了就听听歌看看天花板。
今天真开心,看了一天的jojo,晚上又看金咕咕直播不停的想笑,好久都没这么爽了
有点想家里面的大床了,刚刚好一个人躺平,想怎么动就怎么动,回家了看视频听歌也不用戴耳机,兴致来了就唱歌,就算晚上十二点练琴也不会吵到别人
三
明天又要早起,但现在已经是凌晨2点半了,欸,难顶
其实我好像这学期过得挺轻松的,但为什么心却这么累呢。就上几节课,做一点作业,基本上就没事了。可是心里 却像是压了一座山。
以后的人生也许一直都是这样吧。
四
不知道自己在写些什么傻不啦叽的蠢话,返回去读了读前面写的,搞得自己好像抑郁症似的,太扯了。 ...
Codeforces_Round#679_div2_E
这场总体难度不算大(感觉C,D,E的难度居然出奇的一致)
如果码力再强点,也许是能AK的,可惜只切了四题。不过一下子rk涨了100多,还是有点出乎我的意料hh
题目大意(E. Solo mid Oracle)
假设一个单位有H点生命值,你拥有一个技能能修改该单位的生命值H。
若在某一时刻t发动该技能,效果如下:首先,在t时刻对该单位在造成a点伤害;然后在t+1,t+2,t+3,...,t+ct+1,t+2,t+3,...,t+ct+1,t+2,t+3,...,t+c时刻治疗该单位,每次均治疗b点生命值
技能的冷却时间为d,也就是说,若在时刻t发动技能,则在t+d时刻才能继续使用该技能
0时刻单位的初始生命值为H,H>0。若某一时刻该单位生命值≤0\leq 0≤0,则该单位被击杀
若要使该单位被击杀,H的最大值为多少?若无解则输出-1。
数据范围
共有T组数据(1≤t≤50)(1\le t\le 50)(1≤t≤50),输入为a,b,c,da,b,c,da,b,c,d,其中1≤a,b,c,d≤1061\le a,b,c,d\le 10^61≤a,b,c,d≤106
要求输出一 ...
2020年10月13日随笔
现在是下午四点半,由于眼镜框坏掉(被我不小心压了然后掰坏的),我翘了离散数学的课,现在在宿舍码这一篇博客。
这篇博客是留给我自己的。
pb_ds简介
pb_ds简介
pb_ds 库全称 Policy-Based Data Structures,又称平板电视。
pb_ds 库封装了很多数据结构,比如哈希(Hash)表,平衡二叉树,字典树(Trie 树),堆(优先队列)等。
就像 vector 、 set 、 map 一样,其组件均符合 STL 的相关接口规范。部分(如优先队列)包含 STL 内对应组件的所有功能,但比 STL 功能更多。
pb_ds 只在使用 libstdc++ 为标准库的编译器下可以用。
堆
使用方法
123456789101112#include <ext/pb_ds/priority_queue.hpp>#include <bits/stdc++.h>// 注意<ext/pb_ds/priority_queue.hpp>不在<bits/stdc++.h>内using namespace __gnu_pbds;//注意pb_ds和std的类名称里有重复的地方//如果仅写这句话且不写using namespace std; ,则定义priority_queue&l ...
codeforces蓝名了!
蓝名了耶,finally!
昨天下午打完一场Education Round,虽然只切了四道,但是按照以往的经验,我的积分应该还是会上涨的。果不其然,今早看结果的时候直接升到蓝名了。芜湖~
说来也惭愧,接触OI也这么久了,还是人生第一次蓝名QAQ
从上次的CCPC网络赛失利开始,每一场cf的#div2比赛我都不会放过,才一点一点地打了上来,这期间大概上涨了200分,希望以后也再接再厉吧!
听vying说,他花了半年地时间从紫到橙。而已确定的一次校赛就在明年三月,距离现在也是差不多半年时间,希望我也能在校赛之前橙名。
加油!
Bitset小记
简介
std::bitset标准库中的一个存储0/1的大小不可变容器。严格来讲,它并不属于 STL。
由于内存地址是按字节即byte寻址,而非比特bit,一个bool类型的变量,虽然只能表示0/1, 但是也占了1 byte的内存。
bitset就是通过固定的优化,使得一个字节的八个比特能分别储存 8 位的0/1。
对于一个 4 字节的 int 变量,在只存0/1的意义下,bitset占用空间只是其132\frac{1}{32}321,计算一些信息时,所需时间也是其132\frac{1}{32}321。
在某些情况下通过bitset可以优化程序的运行效率。至于其优化的是复杂度还是常数,要看计算复杂度的角度。一般bitset的复杂度记为:(设原复杂度为O(n)O(n)O(n))
O(nw)O(\frac{n}{w})O(wn),其中w=32w=32w=32,这种记法较为普遍接受
O(nlogw)O(\frac{n}{logw})O(logwn),其中wvwvwv为计算机一个整型变量的大小
构造函数
用字符串构造时,字符串只能包含 ‘0’ 或 ‘1’ ,否则会抛出异常。
构造 ...
STL的简单应用
迭代器
指向某个STL容器container中的元素的迭代器的类型一般为container::iterator
迭代器可以用来遍历容器
注意auto可以起到同样的效果
123456789101112131415vector<int> data(10);// 使用下标访问元素for (int i = 0; i < data.size(); i++) cout << data[i] << endl; // 使用迭代器访问元素for (vector<int>::iterator iter = data.begin(); iter != data.end(); iter++) cout << *iter << endl; for (auto iter = data.begin(); iter != data.end(); iter++) cout << *iter << endl; for (auto x : data) cout << x << endl ...