- 博客(18)
- 问答 (2)
- 收藏
- 关注
原创 动态规划——背包问题(01背包、完全背包,分组背包与二进制优化)
其常见的问题形式为:给出n个物品,每个物品有对应的价值和体积。给出背包容量后求不超过背包容量的条件下能获得物品的价值总和的最大/最小值定义一个二维数组,dp[i][j] 表示在考虑前i个物品,且背包容量为j的情况下,能够获得的最大价值。那么,我们就能得到如下的状态转移方程:首先,对于每个物品,我们都有选和不选两种选择其中,dp[i-1][j]表示不选择第i个物品,dp[i][j-volume[i]]+value[i]表示选择第i个物品。这两者之中我们取值较大的那个。cin>>v>>m;
2024-08-14 21:04:17 1284
原创 哈夫曼编码(哈夫曼树)
哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种广泛应用的编码方式,属于可变字长编码(VLC)的一种。该编码方法由David.A.Huffman在1952年提出,其核心思想是完全依据字符出现的概率来构造异字头的平均长度最短的码字,这种编码方式有时被称为最佳编码。比如,题目中询问的d对应的数据为30,从30向上遍历到根节点就能得到编码长度为2.(本蒟蒻当时还不会哈夫曼编码)
2024-08-13 20:49:37 530
原创 结构体(struct)、联合体(union)和类(class)
封装是指将对象的属性和操作这些属性的方法(或称为函数)捆绑在一起,形成一个独立的单元,即类。在封装的过程中,对象的内部实现细节被隐藏起来,只对外公开类的公有成员,从而控制对对象属性的访问和修改。这样做的目的是保护对象的数据不被随意修改,同时保证对象的使用者只需通过公开的接口与对象交互,而无需关心对象内部的实现细节。继承是面向对象编程中的一个重要特性,它允许一个新的类(子类)继承一个已存在的类(父类)的属性和方法。联合体的大小是其最大成员的大小,因为联合体中的所有成员都共享相同的内存空间。
2024-08-13 20:28:25 583
原创 链表——双向链表
删除第k个节点node *p;p=head;i<=q;delete p;注意这里除了改前后节点的前驱后继之外,还要delete当前的节点确保真正的删除。
2024-08-12 22:50:54 290
原创 数学——排列组合总结和归纳
最后,对于每一种选择(就是选哪个数来考虑),我们都有D(n-1)+D(n-2)种错排方式。(错排)将数字1,2,3,4填入标号为1,2,3,4的四个方格里,每格填一个数,则每个方格的标号与所填数字均不相同的填法有()2.A,B,C,D,E五人并排站成一排,如果B必须站在A的右边(A,B可以不相邻)那么不同的排法种数是()1.A,B,C,D,E五人并排站成一排,如果A,B必须相邻且B在A的右边,那么不同的排法种数有()由数字0,1,2,3,4,5组成没有重复数字的六位数,其中个位数字小于十位数字的共有()
2024-08-11 21:57:02 637
原创 数学——排列组合2
定序问题使用缩倍法(插空法),通过减少排列的种类来简化问题。多排问题使用单排法,通过将多排问题转化为单排问题来简化计算。圆排问题也使用单排法,将圆上的排列问题转化为直线上的排列问题。可重复的排列使用求幂法,通过计算重复元素的排列数来得到总排列数。有序分配问题使用逐分法,按照一定的顺序进行分配。1. 相邻问题使用捆绑法,先将相邻的元素“小排列”,然后将其“捆绑”起来看做一个整体,再与其他元素进行“大排列”,即“先小排列,后大排列”。四个不同球放入编号为1,2,3,4的四个盒中,则恰有一个空盒的放法有多少种?
2024-08-11 20:04:26 146
原创 数学——排列组合
(错排)将数字1,2,3,4填入标号为1,2,3,4的四个方格里,每格填一个数,则每个方格的标号与所填数字均不相同的填法有()3.A,B,C,D,E五人并排站成一排,如果B必须站在A的右边(A,B可以不相邻)那么不同的排法种数是()1.A,B,C,D,E五人并排站成一排,如果A,B必须相邻且B在A的右边,那么不同的排法种数有()由数字0,1,2,3,4,5组成没有重复数字的六位数,其中个位数字小于十位数字的共有。A在第一排,就有4种,B在A后面有4种,C在最后的最后有4种,其余位置为5的全排列。
2024-08-10 17:22:32 452 1
原创 图论——拓扑排序
在CSP初赛基本信息(书接上回)这篇文章中,就已经对拓补排序做了一个概念性的解释(做诠释),但是本蒟蒻昨天写一个拓补排序的模板写了很久,所以写这一篇来记录一下拓补排序
2024-08-10 10:46:16 856
原创 CSP 2020 入门级第一轮重要题目
两个人非要一起站,就可以把这两个人看成一个人,用排列,A44计算得到4*3*2*1得到24中可能,但是站在一起的两个人之间还有A12种可能,一共就是A44*A21种就是24*2=48种。另外一列也是一样的,为15+1到15到1的和。做加法的那一列会从15+14开始,每迭代一次都加上前一个,直到加到一,最后加法部分的结果就是15的2次方一直加到1的二次方(2.若输入的 nn 为 15,接下来的输入是 15 到 11,以及 15 到 11,则输出为( )。将所选区间的右端点更新到新选择的区间的右端点。
2024-08-09 23:32:24 508
原创 CSP初赛基本信息(书接上回)
接着,选择 B 输出,删除 B 及其相关的边,此时 D 的入度变为 0。如果一个程序的语句执行次数为2n^3+3n^2+n+7,那么这个程序的渐进时间复杂度为O(n^3)。它的主要思想是:对于一个有向无环图,选择一个入度为 0 的顶点并将其输出,然后删除该顶点以及与其相关的边,重复这个过程,直到图中所有顶点都被输出。另外,大数组必须开全局变量。2、对于一棵满二叉树来讲,它的层数(深度)为k,则它的节点总数为2k-1。那么,在执行的时候是从3开始判断是否为真,然后执行某一个表达式,依次向上回溯。
2024-08-09 17:18:26 1062
原创 CSP-J 2020 第一题 优秀的拆分
我们就可以很开心的直接生成一个等比数列,从2的一次方列举到2的30次方,然后从2的30次方到这循环到2的1次方,用输入的n来判断是不是比当前遍历到的值大,如果大,就输出当前的值,并且用n减掉。不然就一直循环直到遍历完整个等比数列。首先,如果你很很熟悉十进制传二进制的代码,那么这道题对你而言就十分简单。但也不是说不会十进制传二进制,这道题我就做不来。首先明确一点,就是奇数肯定不是优秀的拆分。因为奇数绝对会拆出来2的0次方,那么我们。你可以发现他的本质其实就是转成二进制,然后从大到小输出每一位。
2024-08-08 22:04:48 535
原创 CSP初赛基本信息
其实,它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。输入设备是计算机的重要组成部分,输入设备与输出设备合称为外部设备,简称外设,输入设备的作用是将程序、原始数据、文字、字符、控制命令或现场采集的数据等信息输入到计算机。关于位运算的相关知识请有兴趣的同学自己学习。是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。
2024-08-08 17:30:08 1163
原创 C++数据排序
首先我们需要一个返回值为布尔(bool)的函数,这个函数返回你想要的排序规则 ,举个例子return a>b;return 0;以上程序的运行结果为6531,可以看到经过对排序规则的自定义,成功的改变了他的排序顺序。return a>b表示排序的顺序为前面的数大于后面的数,也就是由大到小排列,降序我们来做一道题模拟一下:给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前。输入:第一行为n (0 < n < 20),表示班里的学生数目;
2024-02-01 00:39:29 410
一款用Python开发的系统工具,方便对电脑的操作 因为没有数字签名,可能会被杀软报毒,请忽略
2023-02-01
一款管理pip的图形化软件
2023-02-01
Python如何列表相减且不去重?
2023-08-07
pygame库打包问题
2022-04-20
TA创建的收藏夹 TA关注的收藏夹
TA关注的人