北京理工大学OJ的Mid难度题目的题解

这里是北京理工大学OJ的Mid难度题目的题解
只有思路没有代码的哦
我会尽量完整地展现自己的思路历程

11 XC的缎带

首先,如果把布条都剪成长度1来补洞,有n个洞,要剪n刀,
很显然,如果此时都不能补上所有洞,就输出‘-1’

然后,很自然地想到相邻的洞,可以不耗费代价,把补它们的布条合并
形如题例的‘1 1 0 0 1 0 1 0’中的‘0 0’
每合并这样的两个漏洞,可以少剪1刀

依次类推,额外消耗相应长度的布条,来合并距离为1,2……的洞
只要布条够用,每合并1次,可以少剪1刀
这就是此题的贪心思路

24 求函数最大值

取了点巧,应该是数据不够强

直接从L开始枚举,L+0.1,……,总共取了1e5个点测试,取其中f(x)的最大值
emmmmmm,AC了,时间还挺短

29 字母梯形

46 数塔

简单DP

48 易男神和他的小粉丝

1e5个月有8333年,易男神真是长寿(呱)

dp[i]表示包括第i个月,已经连续涨粉的月数
dp[i] = a[i] > a[i-1] ? dp[i-1]+1 : 1
pd[i]表示包括第i个月,之后连续涨粉的月数
pd[i] = a[i] < a[i+1] ? dp[i+1]+1 : 1

之后修改其中一个月为前一月+1或者后一月-1
考察前后的大小关系,啦啦啦啦之类的就行了

49 龙神和平行四边形

强烈谴责不按照题述给用例的乐色出题人,死ね!

北京理工大学OJ的Mid难度题目的题解_第1张图片

显然,成对的线段不用折,可以处理出一个每种长度只有一根的数组

那么只有四种情况
a、一根折完,和另两根形成了两对,成对线段+2
b、一根折完,和另一根形成了一对,成对线段+1
c、折完自交形成一对,成对线段+1
d、数组里只有孤独的一根,且是奇数长度

答案就是成对线段的一半,向下取整

51 Love Diamond Forever.jpg

实际上是求一个叶子结点都为(质量1的月狗)的哈夫曼树
*哈夫曼树就是一棵所有节点价值和最小的树
如例2:

北京理工大学OJ的Mid难度题目的题解_第2张图片

当然我们生成这棵树的方法是DP
dp[i]表示把一个质量为i的月狗分解为i个质量为1的月狗们受到的最小伤害
damage[i]表示质量为i的月狗造成的伤害
一旦dp[i]想到了,转移方程就很好想到
dp[i]=min(dp[x]+dp[y]+damage[i]) 其中 0

特别地,上面所说的根节点,也就是质量为M的月狗,不会造成伤害
因为质量为M的月狗还没咬钻石,钻石就把它劈成两半了

52 很会dp

这题背包容量太大了,肯定不能dp
值得注意的是物品只有35个,我们肯定从这方面入手
可以百度“大容量背包问题”找来做,很锻炼思维

2^35太大没有办法枚举
但是它的一半,2^18不大,我们可以把35件物品分成两份,分别枚举可能的体积
然后对于其中一份中的每一个体积,都在另一份中二分查找即可

转载于:https://www.cnblogs.com/hexsix/p/10097824.html

你可能感兴趣的:(北京理工大学OJ的Mid难度题目的题解)