- 博客(31)
- 收藏
- 关注
原创 算法作业(装载问题)
实验六 装载问题###问题描述与实验目的:有n个集装箱要装上2艘载重量分别为c1和c2的轮船,其中第i个集装箱的重量为wi,要求确定是否有一个合理的装载方案可将这个集装箱装上这2艘轮船。如果有,找出一种装载方案。注意,在满足的条件下才可能将这个集装箱装上这2艘轮船。###输入输入有若干组测试数据(不超过20组)。每组测试数据有3行:其第1行上是集装箱个数n,(n<20),第2行...
2018-10-31 17:36:15 3561
原创 汇编(实现32位 加法,并调用int 10h 输出结果)
定义双子类型: A DD 21111112H B DD 11111111H上面的A和B都是32位,而ax,dx都是16位,所以需要把高16位和低16位分开进行加法。其中先处理低16位,用add。高16位可能会有进位,所以用adc。A 32位数在内存中的表示 21 11 11 11 12 A+1即为 11,A+4即为21至于输出,使用了xlat表,先自己建立...
2018-10-31 16:34:36 3739
原创 算法作业 (最短路+记录全部路径)
思路:采用n*logn的优化迪杰斯特拉算法,求出最短路,反向建图以后,在dfs搜索即可,用set+vector记录路径,注意vector的传递需要加引用(用string 就不用加引用)。实现非常简单,直接看代码就行。#include <bits/stdc++.h>using namespace std;const int maxn=100;typedef long lo...
2018-10-31 16:14:34 1251
原创 A - Altruistic Amphibians Gym - 101933A (贪心+dp)
题意:坑里有一堆青蛙,青蛙有身高、跳跃高度、体重。青蛙可以叠罗汉,但是不可以撑起超过自己体重的重量。问有多少青蛙可以跳出去。体重总和<=1e8思路:因为最重的青蛙肯定不能出去,所以应该是保证体重轻的能出去,而重的在底下,所以,先按体重排序。设dp[i]表示,体重为i的最大高度可以达到多少,那么判断dp[i]+h与d 的大小关系就知道这只青蛙能否出去了。因为能托起的青蛙不能超过最底...
2018-10-28 23:45:22 728
原创 操作系统 同步互斥题目
互斥问题:(一) 图书馆有100个座位,每位进入图书馆的读者要在登记表上登记,退出时要在登记表上注销。要几个程序?有多少个进程?答:一个程序;为每个读者设一个进程思路:先找到互斥的关系,当多个人来的时候,服务台只能为一个人进行登记或者是注销操作,所以需要为服务台的登记和注销操作设一个互斥量。至于100个作为如何安排是不重要的,我们只要关系能否让人进来就行。这个时候就有两种情况:...
2018-10-28 19:15:04 10437
原创 跳马问题(算法作业)
#实验五 跳马问题 ###问题描述与实验目的: 给定8*8方格棋盘,求棋盘上一只马从一个位置到达另一位置的最短路径长。注意马是走“日”形的。###输入输入有若干测试数据。每组测试数据仅1行,每行上有2个方格pos1、pos2,之间用一个空格隔开,每格方格表示棋盘上的一个位置,该位置由表示列的1个字母(a-h)及表示行的一个数字(1-8)构成,如“d7”表示第4列第7行。###输出...
2018-10-25 15:29:22 10815
原创 3-idiots HDU - 4609(FFT)
思路:原理和求 ai+aj=ak的数量相同,去重方式略有不同。先求出卷积结果,每次枚举最大边,并且找到比它小的两边和大于第三边的数量即可。去重主要包括下面几种情况:1. 一条边大于,一条边小于2. 两条边都大于3. 其中一条边为自身代码:#include <bits/stdc++.h>using namespace std;typedef long lon...
2018-10-24 09:17:32 287
原创 A+B Problem(FFT)
描述给定 n 个整数,问有多少种方式选择三个整数 (i,j,k),使得 ai+aj=ak(i≠j≠k)?两种方式不同当且仅当有序三元组(i,j,k)的元素至少有一个不同。输入第一行为一个整数T,表示测试数据组数。对于每组测试数据:第一行为一个整数n。第二行为n个整数a1,a2,…,an中间以空格分割。T≤101≤n≤2⋅105|ai|≤500输出对于每组测试数据,输出“C...
2018-10-23 09:58:34 293
原创 A * B Problem Plus HDU - 1402 (FFT入门)
利用fft加速乘法,直接套模板就行。代码:#include <bits/stdc++.h>using namespace std;typedef long long LL;typedef long long ll;const int MAXN= 2e5+10;const int maxn=1e5+10;const double PI = acos(-1.0);s...
2018-10-20 10:48:46 143
原创 FFT模板
原理参考博客:https://blog.csdn.net/f_zyj/article/details/76037583代码:#include <bits/stdc++.h>using namespace std;typedef long long LL;typedef long long ll;const int MAXN= 2e5+10;const int max...
2018-10-20 10:47:32 145
原创 Fire POJ - 2152 (树形dp)
题意:给你一颗树,每个点都有一个w值,代表在这个点修建工程需要花费w,还有一个d值,代表离这个点距离小于d的点可以作为这个点的建立工程的点。每条边都有权重,求出覆盖所有点的最小花费。思路:首先分析,是否具有最优子结构性质,发现任意一颗子树的最小值,都满足最优子结构。考虑动态规划的做法。这个题的难点在于可以选一个点来覆盖其他点,所以我们的一个想法必然是枚举这个被选取的点。设dp[u][j...
2018-10-20 09:42:38 379
原创 rep movsd ,repz CMPSB , CMPSW , CMPSD ,cld std用法
CLD指令功能:将标志寄存器Flag的方向标志位DF清零。在字串操作中使变址寄存器SI或DI的地址指针自动增加,字串处理由前往后。相反功能指令是STD,将方向标志位DF置1,在字串操作中使SI或DI的地址指针自动递减,字串处理由后往前。 movsd是把ds:[si]开始的DWORD传送到es:[di]开始的内存中(将ds:[si]处的4个字节数据送到es:[di]处),如果DF标...
2018-10-19 11:09:26 2430
原创 优先队列优化最短路+记录所有最短路径
普通的最短路做法是n^2的复杂度,利用优先队列实现可以优化到n*logn 的复杂度。记录所有路径需要记录反向边,dfs搜索一次,并用set记录即可。具体实现看代码:#include <bits/stdc++.h>using namespace std;const int maxn=100;typedef long long ll;struct Edge{ ...
2018-10-17 23:06:03 1320
原创 Just Random HDU - 4790 (数形结合)
思路:这道题有一种很好的理解方式,就是数形结合。我们可以把题目中的第一组数据理解为下面这幅图。第一组数据里a=0,b=5,那么x的取值范围就是[0,5],c=0,d=5,那么y的取值范围也是[0,5],那么图中正方形内的所有点,包括边缘上的点,就是全部可能被选到的情况。并且每个点被选到的可能性相同。接下来我们再看p=3,m=0,那么(x+y)%p=m→→x+y=k*p+m→→x+y=3k...
2018-10-08 23:21:45 184
原创 Fibonacci Tree HDU - 4786 (巧妙的运用最小生成树)
题目大意:给你图的N个点和M条双向边。告诉你每条边的权值。权值为1表示该边是白边,权值为0表示该边为黑边。问:能否找到一棵生成树,使生成树白边的个数恰好为fibonacci数。如果能构成这样的fibonacci树,输出Yes,否则输出No。思路:给你权值要么是0,要么是1,然后让你求白色边的数量关系。白色边的数量不就等价于边上的权值之和......考虑最少的白边数量,自然是最小...
2018-10-08 10:37:46 314
原创 最大全1正方形(简单dp)
描述 飞哥最近 得到 了一大块 n*m 的土地 ,他想在这块土地 上建一个正方 形的农场 ,但是 这块土 地有些地方 被大石头 占着,无法 使用 ,于是 飞哥想来问你 在这块土地 上能建成的农场 的最大 边 长为多少 ?输入 第一个数T表示数组组数每组 数据 一开 始有两个 整数 n和 m,表示 土地 的长和宽。接下 来是个 n*m 的矩阵 ,元素 只有 0 和 1 ...
2018-10-08 00:38:33 1324
原创 Best Cow Fences POJ - 2018(斜率优化dp)
思路:直接写出表达式 sum[i]-sum[j]/(i-j)发现是个斜率的式子,所以考虑直接用斜率优化来做。其余部分根简单,只要注意要维护一个长度不超过k的区间,在入队的时候需要处理成 i-k+1的形式。代码:#include <iostream>#include <stdio.h>#include <algorithm>using na...
2018-10-07 16:14:30 272
原创 汇编语言 数值回送操作符(type,size,length)
1. type 格式为 type expression 如果该表达式是变量,则返回该变量的以字节数表示的类型,DB为1,DW为2 ,DD为4,DF为8.... 如果表达式是标号,则返回代表该标号的数值类型,NEAR是-1,FAR为-2。如果表达式是常数,则应该回送0 。 2 length 对于变量中使用DUP 的情况,返回分配的单元数(例如 3 dup(?))...
2018-10-07 15:05:16 18024 1
原创 汇编语言中标号和变量的区别
变量和标号都是用户定义的符号地址,标号有两个属性,段基地址、偏移地址变量有三个属性,段基地址、偏移地址和数据类型一般来说,标号只在代码段中被定义,而变量则可以被定义在数据段和代码段中。标号是个死数,指的是一个固定的值,一般指向的目标不是程序段就是数据段 而且定义完就不能变了。编译程序的时候,编译器把标号统统用具体的立即数替换。变量就是活的了,想怎么用就怎么用,一般这个指向的地址是RAM...
2018-10-07 14:16:49 5854 1
原创 Lawrence HDU - 2829 (斜率优化dp)
思路:还是先列出普通的dp方程,dp[i][j]=min(dp[k][j-1]+s(i,k+1)) 表示到前i个站点,用了j次爆炸,得到的最小值,其中s(i,k+1)表示从k+1到i的连乘积。直接做必然是n^3 因为需要枚举k。考虑到dp[i][j],当j为定值,它随着i单调递增的,所以考虑使用斜率优化来做。在分析之前先处理一下任意区间的连乘积问题:有两种解决方案: 1. 记录前缀和...
2018-10-07 12:13:55 302
原创 码元,码元速率,波特率,比特率,数据率的理解
码元:在数字通信中常常用时间间隔相同的符号来表示一个二进制数字,这样的时间间隔内的信号称为(二进制)码元。而这个间隔被称为码元长度。值得注意的是当码元的离散状态有大于2个时(如M大于2个)时,此时码元为M进制码元。(百度百科)这里说的比较官方,一下子没反应过来。在谢希仁这本书中有一个实例,假定基带信号为101011000110111010…如果直接传送,则每个码元携带的信息是1bit(可以理...
2018-10-06 19:22:25 36579 6
原创 Pearls POJ - 1260 (简单dp)
大致题意:给出几类珍珠,以及它们的单价,要求用最少的钱就可以买到相同数量的,相同(或更高)质量的珍珠。【规定买任一类的珍珠n个(价格为p),都要支付(n+10)*p的钱,即额外支付10*p】 例如样例Input的第二个例子:31 101 11100 12需要买第一类1个,第二类1个,第三类100个按常规支付为 (1+10)*10 + (1+10)*11 +...
2018-10-06 12:32:07 210
原创 Print Article HDU - 3507 (斜率优化 dp)
作为斜率优化dp的入门题,可以说的非常经典了。斜率dp是一类数形结合的题目,数的方面让你写出程序,而形的方面则让你更清楚的理解正确性。首先,这题的状态转移方程是很好写的:dp[i]=min(dp[i],dp[j]+(sum[j]−sum[i])2+M)我们优化的最终目的就是要在o(1)的时间内可以求出最优的dp[j]。下面的做法就是斜率dp的一般套路:首先,在斜率dp中,一定要...
2018-10-05 23:47:22 178
原创 Straight Master Gym - 101775J (差分的应用)
思路:以前没做过差分的题目,这题想不到用差分,感觉很神奇。思路:构造差分序列b【i】=a【i】-a【i-1】,比如1 3 2 5 1的差分序列就是1 2 -1 3 -4,这样将区间【l,r】内的所有数减一相当于把b【l】减一, 把b【r+1】加一,基于这个思想我们从左到右扫整个序列,遇到正数就找他右面离他最近的负数,把这个负数尽量变为0,变为0后若正数还有剩余,就继续往右找负数直到这个正数用...
2018-10-05 21:21:48 279
原创 Color Gym - 100548F (容斥原理)
思路:先考虑满足不相邻的条件,很容易写出,C(k,m)*k*k^(n-1)。但是这样并不是严格使用了k种颜色的,还包括了使用了1,2,3,....k-1种颜色的,所以,我们需要将其去重。去重当然是考虑容斥:设使用了前k种颜色为f[k],那么前k-1则为f[k-1],需要注意的是f[k-1]中包含k-2,k-3.....1,同理f[k-2]包括了k-3,k-4....1。看下表:f[i-...
2018-10-04 22:58:42 309
原创 Cut the Sequence POJ - 3017(dp+单调队列优化)
思路:dp[i]表示前第i项的最小值。很容易写出状态转移方程:dp[i]=min(dp[j]+max(a[j+1],a[i])),j<=i;优化的思想是:我们需要快速的在前面找到一个j,同时还要找出j+1到i之间的最大项是什么,这样就能快速实现,最直接的思路是求RMQ,但是这题可以用单调队列。用单调队列维护一个递减的序列,对于当前的a[i],先将队尾小于或等于a[i]的元素删掉,...
2018-10-04 21:41:45 274
原创 Fxx and game HDU - 5945(单调队列优化dp)
思路:考虑反着dp,从dp[1]倒推dp[x]因为dp[i]<=dp[j] j<i ,所以考虑用单调队列来优化。除法不用考虑,考虑加法就行。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;const int ...
2018-10-03 23:32:58 299
原创 Trade HDU - 3401 (单调队列优化dp)
思路:首先把dp状态方程写出来:设dp[i][j]表示第i天有j个股票的最大值。那么转移可以有三种情况:在第i+1天什么都不干,dp[i+1][j]=dp[i][j]在买进一些股票:dp[i+1][j]=max(dp[i+1][j],dp[i+1-w-1][k]-(j-k)*ap在卖出一些股票:dp[i+1][j]=max(dp[i+1-w-1][k]+(j-k)*bp) 可以...
2018-10-03 22:45:43 231
原创 D Tree HDU - 4812 (树分治+逆元线性预处理+map映射)
思路:首先一个最重要是思路:ai*aj%mod=k%mod 即a[i]=k*inv[a[j]]%mod。所以对于一条路径上的乘积是否为k,我们考虑将其分成2部分,第一部分乘起来放map里,第二部分乘了以后去map里找,如果找到,说明有这样的组合可以乘积为k,既满足题意。具体实现的思路自然是点分治,一次找重心做为根节点,需要注意的是,每次重新选根节点,都要清空map,因为重新找一颗子树时,相...
2018-10-02 23:20:11 262
原创 Boatherds POJ - 2114 (树分治)
思路:还是和以前求路径值<=k,一样的套路,改下cal函数里计算==k的方法就行。代码:#include<iostream>#include<map>#include<string>#include<cstring>#include<vector>#include<algorithm>#includ...
2018-10-01 20:58:59 154
原创 聪聪可可 HYSBZ - 2152 (树分治)
思路:这题和https://blog.csdn.net/qq_40774175/article/details/82909005,非常类似,这里只不过多了一步转化。它要处理3的倍数,为了方便,我们在建图和统计长度的时候都进行模3操作,这样,最后两个点之间的路径只可能是0,1,2,然后我们就可以利用他们进行组合成3的倍数,首先0和0组合,然后1和2组合,然后2和1组合(在这题中(1,2)和(2,...
2018-10-01 10:56:50 240
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人