![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
题解-总结
CEDL
程序员之所以犯错,并不是因为他们不懂,是因为他们什么都懂
展开
-
01背包
题目: 给出n个物品,其重量分别是w[i],价值分别是c[i],求使用v大小的背包所能获得的最大价值。 输入:第一行,两个数n,v(1<=n,v<=1000) 下面n行,每行2个数,分别是w[i],c[i] 输出:一个数,表示最大价值。 ——————————————————————————————————————————————————————— 01背包是动态规划的原创 2017-05-23 15:54:23 · 373 阅读 · 1 评论 -
总分
哎,现在发现背包问题的伪装方法越来越多了,这题就是一道完全背包,别的不多说了,上代码:#include<cstdio>#include<cstdlib>#include<algorithm>int c[10001],w[10001],f[10001];int main(){ freopen("score.in","r",stdin); freopen("score.out","原创 2017-06-13 20:20:52 · 319 阅读 · 0 评论 -
健康的好斯坦奶牛
穿越栅栏这题是一道 DFS题,但觉得DFS代码太长,就写了投机取巧代码。 这个技巧就是,用位运算,呃呃呃,这么说吧,我现在有一个二进制的数,这个数有g位,第i位数字为1是,表示用这种饲料,0表示不用,这样一来,就只要枚举从0~1(<<)g位了,代码会短很多,时间复杂度也并不见得比DFS要慢。 上代码:#include<iostream>#include<cstdio>#include<cst原创 2017-06-08 21:14:51 · 434 阅读 · 0 评论 -
跳棋的挑战
呃呃,这题是一道经典的DFS题,就是个8皇后啊。 因为本人心虚,赶脚写的代码有点慢,就打了个表。 咳咳咳,说正题,这题说每行,每列,每斜边都至多有一个旗子,这不就是8皇后的标准题目吗,8皇后大家总会写吧。 恩,如果大家连把皇后都不会写的话,那就接着往下看。 先看一下8皇后的原题: 在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问原创 2017-06-08 20:19:44 · 743 阅读 · 0 评论 -
数字(number)
题目可在下载频道下载:戳我 题目: Task 2. 数字(number) 空间限制:256MB 时间限制:1sDescription 给你n个0~9的数字,请你把它们排成一个不含前导0的n位数,满足这个数是233的倍数。求有多少种可行的方案。 (我们把n个数字从1~n标号,两个方案不同当且仅当标号序列不同)Input 第一行一个数n。 第二行n个空格隔开的数,为给你的数。保证原创 2017-06-29 16:08:46 · 493 阅读 · 0 评论 -
房间(room)
题目可以到下载频道上下载:题目本题题目:Task 1. 房间(room) 空间限制:256MB 时间限制:1s Description有n个房间以及m条双向通道。你需要找到有多少条从1号房间出发到n号房间路径,使得每个房间都恰好经过了一次。 Input第一行两个数n、m。接下来m行,每行两个数x、y,描述一条连接房间x和房间y的通道。保证每条通原创 2017-06-29 10:31:11 · 524 阅读 · 0 评论 -
HDU_P1176免费馅饼
题目:免费馅饼(戳我) 花了两三天的时间,终于把这提给做出来了。 所以今天就来写个总结,这题我使用记忆化搜索做的,我推荐大家多用记忆化搜索,因为用记忆化搜索省脑子,只要把当前的状态记录下来就好了,代码也并不比动态规划的多,时间复杂度只会多几个毫秒,还是很值的。 我就来讲讲我用记忆化搜索的思路,先按照DFS得写一个,相信大家都会,然后再在返回的时候记忆每个状态,状态是这样的:f[i][j]表示当原创 2017-05-17 22:00:04 · 314 阅读 · 0 评论 -
HDU_P1203 I NEED A OFFER
题目:I NEED A OFFER(戳我) 花了2个多小时,终于把这提做出来,对于我这种只用cout的人,坑还是很多的。。。 这题是只要学过概率,就可以把它变成一个01背包——学过动态规划的人都会做。 eee,这里有一个小技巧,就是如何求能申请到一所学校的概率,就是用1-一所学校都申请不到的最小概率。 eee,只说可能有点听不懂,举个栗子: 这是样例: 10 3 4 0.1 4 0.原创 2017-05-18 22:01:55 · 329 阅读 · 0 评论 -
HDU_P1421搬寝室
题目:搬寝室(戳我) 这题是一道动态规划+贪心 贪心用来初始化,动态规划用来求解答案。 首先来看贪心:题目中说到,搬两件物品所需要的体力是abs(a-b)^2,那贪心策略就是选两个重量最相近的放在一起,所以我们要把输入的数据从小到大排序。 所以,很多人的思想就停留在了贪心这个层面,样例是过得了,可测的时候就会WA,这里给出一组反例: 5 1 1 5 10 1000 1000 很明显答原创 2017-05-19 13:57:25 · 282 阅读 · 0 评论 -
noi.openjudge_P7627(鸡蛋的硬度)
题目:鸡蛋的硬度(戳我) 此题高大上。。。google面试的一题就和这题差不多。。。 此题用dp来解。 先假设只有两个鸡蛋,那么,f[i]表示楼层最高有i层,且只有两个鸡蛋,测试这鸡蛋的硬度时,需要摔鸡蛋的最小次数. 这个问题很好解决,转移方程是:f[i] = 1+max(f[n-i],i-1);其中f[i-1]表示鸡蛋从第i楼砸下来如果没有烂,那么还要摔几次,i-1表示,如果摔下来烂了,那原创 2017-05-16 22:33:28 · 638 阅读 · 0 评论 -
noi.openjudge_P8462大盗阿福
题目:大盗阿福(戳我) 这题使用动态规划来解,做动态规划的题有个特点,就是做过的题一下就做出来,没做过的题就很难想出来,所以这里就直接分析这题: 状态表达:f[i] = 在前i家店中最多能盗到的钱数。 转移方程:f[i] = max(f[i-1],f[i-2]+val[i]) 状态数量:n 转移代价:O(1) 时间复杂度:O(n) 空间复杂度:O(n)或O(1) 上面的空间复杂度可以原创 2017-05-20 09:32:17 · 819 阅读 · 0 评论 -
noi.openjudge_P8787数的划分
题目:数的划分(戳我) 推荐用记忆化搜索,代码比动态规划会短很多,省脑经。 记忆的表达:f[i][j] = 把i划分成j个的方法总数。 那么,当j == 0||i#include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>int f[1001][1001];const i原创 2017-05-20 22:06:09 · 687 阅读 · 0 评论 -
有依赖的背包问题——金明的预算方案
题目:金明的预算方案 这是动态规划中的背包问题中的有依赖的背包问题。 幸好题目中说道:每个主件可以有0个、1个或2个附件。附件不再有从属于自己的附件。否则这题就变成了一个树形DP了。 状态表达:f[i] = 当v == i时的最大价值。 状态转移方程:f[j] = std::max(f[j],f[j-num[i].w1]+num[i].c1);原创 2017-05-23 16:58:31 · 911 阅读 · 0 评论 -
01背包变形
题目: 给出n个物品,其重量分别是w[i],价值分别是c[i],在背包装满的情况下,求使用v大小的背包所能获得的最大价值。 输入:第一行,两个数n,v(1<=n,v<=1000) 下面n行,每行2个数,分别是w[i],c[i] 输出:一个数,表示最大价值。 ———————————————————————————————————————————————————— 这是01背包的变形 状态原创 2017-05-23 16:01:48 · 460 阅读 · 0 评论 -
Luogu4011 孤岛营救问题(拯救大兵瑞恩)分层图+最短路
题面:[孤岛营救问题](https://www.luogu.org/problemnew/show/P4011]如果没有钥匙,那么这题就是一个最简单的最短路,有了钥匙以后,就要朝这个方向想(一个很经典的套路):能不能对图做某些操作,使得问题再次变成一个简单的最短路问题。然后就要用到一个技巧:分层图。我们共建2p2p2^p层图,每层图的层数表示当前拥有什么种类的钥匙(用二进制来表示),我们先建立...原创 2018-08-04 20:36:33 · 1443 阅读 · 0 评论