动态规划(01背包问题)
类型
01背包:每件物品最多只用一次
完全背包:每件物品有无限个
多重背包:每个物品的个数不同
01背包:
方法
题目1:https://www.acwing.com/problem/content/description/2/
有 N 件物品和一个容量为 V 的背包,每件物品有各自的价值且只能被选择一次,要求在有限的背包容量下,装入的物品总价值最大。
思路:
枚举第iii个物品,枚举jjj背包的体积
不选择第iii个物品或容量大于jjj,则当前最大价值为dp[i−1][j]dp[i-1][j]dp[i−1][j]
选择第iii个物品,那么找到去除当前物品iii所占体积,也就是j−w[i]j-w[i]j−w[i], 再找二维数组所存的最大价值,最后加上v[i]v[i]v[i],得到dp[i−1][j−w[i]]+v[i]dp[i-1][j-w[i]] + v[i]dp[i−1][j−w[i]]+v[i]
二维:
12345678910111213141516171819202122232425262728#include <iostream>#include &l ...
博弈论(一)
结论:
a1⊕a2⊕...an=0a_1\oplus a_2 \oplus ...a_n = 0a1⊕a2⊕...an=0 先手必败
a1⊕a2⊕...an=x≠0a_1\oplus a_2 \oplus ...a_n = x \ne 0a1⊕a2⊕...an=x=0 先手必胜
证明:
操作到最后, 每堆石子数都是000 , 0⊕0⊕...0=00\oplus 0 \oplus ...0 = 00⊕0⊕...0=0
假设:
不妨设x的二进制表示中最高一位1在第kkk位,那么在a1,a2,…,ana_1,a_2,…,a_na1,a2,…,an中,必然有一个数aia_iai,它的第kkk为时1,且ai⊕x<aia_i⊕x<a_iai⊕x<ai,那么从第i堆石子中拿走(ai−ai⊕x)(a_i−a_i⊕x)(ai−ai⊕x)个石子,第iii堆石子还剩ai−(ai−ai⊕x)=ai⊕xa_i−(a_i−a_i⊕x)=a_i⊕xai−(ai−ai⊕x)=ai⊕x,此时a1⊕a2⊕…⊕ai⊕x⊕…⊕an=x⊕x=0a_1⊕a_2⊕…⊕a_i ...
容斥原理
容斥原理的证明过程:
如果一个元素在k个集合中出现了2次,那么在计算的过程中会被重复的加2次,所以需要减去。
如果出现了三次,那么在计算的过程中会被重复的减去,则需要加上
题目:// httpss://www.acwing.com/problem/content/892/
123456789101112131415161718192021222324252627282930313233343536373839404142// httpss://www.acwing.com/problem/content/892/#include <iostream>#include <algorithm>using namespace std;const int N = 20;int p[N];int n, m;typedef long long LL;int main(){ cin >> n>> m; for (int i = 0; i < m; i ++) cin >> p[i]; int res = 0; // 枚举1 ...
python
python入门
0.表达式
表达式 是值、变量和操作符的组合。单独一个值也被看作一个表达式,单独的变量也是如此。所以下面都是合法的表达式:
在任何可以使用值得地方,都可以使用任意表达式,但是赋值表达式得左边必须是变量名称,在左边放置任何其他的表达式都是语法错误
❌错误实例
str * 10 = “error”
1n = n + 12
n = 12是一个赋值语句,n+12就是一个表达式,求出对应的值,解释器会执行它,并输出
操作顺序
Python遵守数学的传统规则
括号拥有最高的优先级,并可以用来强制表达式按照你需要的顺
序进行求值
乘方操作拥有次高的优先级,所以1+2**3 的结果是9,而不
是27,
乘法和除法优先级相同,并且高于亦有相同优先级的加法和减法,所以2*3-1 是5,而不是
4,并且6+4/2 是8,而不是5。
其它的运算符当用到时可以查表,这里只是说明Python遵守数学的传统规则
字符串操作
通常来说,字符串不能进行数学操作。即使看起来像数字也不行。下面的操作是非法
的:
12'2' - '1' 'e ...
C语言函数,指针
C语言
[toc]
5.函数概述与引用
一个c语言程序由一个或多个程序模块组成,每一个程序模块作为一个源程序文件。对于较大的程序, 一般不希望把所有的内容全放在一个文件中, 而是分别放在若干个源文件中, 由若干个源程序组成一个c程序。
一个源程序文件由一个或多个函数以及其他有关内容(如指令, 数据声明与定义等)组成。
1一个源程序文件是一个编译单位, 在程序编译时是以源程序文件为单位进行编译,而不是以函数为单位进行编译。
c程序的执行是从main函数开始的
所有函数都是平行的, 也就是说在定义时是分别进行的, 互相独立的。函数间能互相调用,但是不能调用main函数, main函数是由操作系统调用的。
在定义函数时要指定函数的类型
使用库函数时应该在本文件开头用#include指令将调用有关库函数时所需要用到的信息”包含“到本文件中来。
函数的声明和定义只差一个分号;
5.1函数形式
(1).有参数函数
12345678910111213141516171819202122#include <stdio.h>int max(int x, in ...
S3C2440A灯的操作(一)
点亮S3C2440A的一颗灯
第一步:
以 GPB5->LED1为例
在mini2440原理图中找到GPB5, 可以看到对应的LED_1
第二步再打开 mini2440用户手册
翻到 1.3.6 ,注意是低电平有效。
第三步 ,打开s3c2440全套中文手册
已知GPBCON是用来设置输入输出属性的,然后我们点亮的LED1的引脚有GPB5,而GPBCON又是控制这些引脚的属性,那么现在我们要控制它闪烁就要设置这些引脚的属性为输出。而GPBCON是两位控制一个引脚,也就是 01 ,如上图所示 GPB5的位为[11, 10],推导如下图。
12GPBCON &= (~(1 << 10) | (1 << 11));GPBCON |= (1 << 10);
这两行的意思就是说将 GPB5改为输出模式,也就是 [11, 10] 对应的位的值为 01。
灯的熄灭和点亮
12GPBDAT |= (1<<5); //设置GPB5为高电平:灭GPBDAT &= (~(1<<5)); // 设置为低电平 :亮
推 ...