- 博客(74)
- 收藏
- 关注
原创 Python 装饰器
视频链接:点击打开链接 装饰器是什么? 其实就是一个函数; 但是它有固定的语法; 如: @装饰器 要改变的函数 or @返回一个装饰器的函数 要改变的函数 而对于装饰器本身而言; 就是写一个以要改变的函数做参数; 然后设计一个新的函数; 最后返回新函数; 主要是理解逻辑; Python 中有很多已写好的装饰器; 下面是一个栗子 #c
2016-11-25 14:38:31
382
原创 poj1860 spfa判断负环
题目链接:点击打开链接 题意: 一个人有一种钞票,面值S; 银行有N种钞票,每两种钞票之间可以进行兑换; 其规则是:S' = (S - com) * rate其中 com 是手续费,rate 是兑换率,S' 是最终的钱; 问经过多次兑换后,钱是否会增加; 理解: 这就是一个负环问题; 不过说起来应该叫“正环”; 先建图,然后推导递推式; 把递推是改一下就可以知道
2016-11-19 10:51:28
431
原创 poj3268 spfa 最短路
题目链接:点击打开链接 题意: 给定一个有向图; 问每头牛到固定地点聚会的花费加上回家的花费之和最大的花费是多少; 其中去和回都是最小的花费; 理解: 此题看上去可以先算回去的最小花费; 但是每头牛来的最小花费怎么算呢? 由于这个图是有向图; 如果把方向翻转了,那么去就是回,回就是去; 再算一次最短路就可以求出每头牛去和回的最短路之和了; 那么两次spfa就可
2016-11-19 10:40:50
462
原创 poj1797 spfa 最短路
题目链接:点击打开链接 题意: 给一个无向图,每条边有个能承受的重量; 问从1到n的最大通过的重量; 理解: 这是以前比赛的一个题; 当时用的多个最短路,最后超时; 实际上在最短路的递推式上改一下就行了; d[v] = max(d[v], min(d[u], w[u, v]));用这个递推式就可以求出最后的答案; 实际上跟求最短路是一样的; 刚学的spfa用
2016-11-19 10:33:04
575
原创 Timus 1102 AC自动机
题目链接:点击打开链接 题意: 给定两人对话的内容; 问给的字符串是否符合两个人的对话; 理解: 很久以前做过这个题; 但是是瞎暴力做的,各种姿势超时; 现在会了AC自动机,再把它做了; 其实还比较简单; 但有个问题在于 putone 是错的; 而 inputone 和 outputone 都是对的; 这个就是bug点; 但是找出规律特判下就行了;
2016-11-19 10:17:18
385
原创 hdu2222 AC自动机
题目链接:点击打开链接 题意: 给n个字串,问文章中有多少个字串; 理解: 这是一个多模式串匹配问题; 和KMP单模式串匹配不同; 用AC自动机即可解决; AC自动机:点击打开链接 上面链接写的很好; 对于AC自动机其实不难,主要在要做好失败指针; 其实这个比KMP还容易理解; 其目的就是找一个后缀相同的串; 第一道AC自动机的题; 留作纪念
2016-11-19 10:10:04
298
原创 hdu5950 矩阵dp
题目链接:点击打开链接 题意: 给定n, 第一个数 a,第二个数 b; 公式:Ai = A(i - 2) * 2 + A(i - 1) + i ^ 4; 求第 n 个数; 其中 n 的范围是 int; 理解: 由公式来看,该题很像斐波那契; 但是 n 的范围太大; 偶然想到斐波那契也可以用矩阵dp来推; 所以就应该用这个方法; 从公式可以看出,在不考虑 i ^
2016-11-03 20:18:56
382
原创 hdu3496 二维01背包
题目链接:点击打开链接 题意: 朵朵喜欢看cartoon; 但她只有 l 的时间看; 她喜欢看 n 种cartoon; 但商店里只能卖 m 种; 对于每一种都会消耗 w[i] 的时间; 而看完之后她会得到 v[i] 的价值; 问朵朵能得到最大的价值; 如果不能看够 m 种,则输出 0; 理解: 在01背包的基础上多了一项条件; 即只有 m 种,并且 m 必须
2016-09-17 10:21:33
436
原创 hdu3033 分组背包
题目链接:点击打开链接 题意: 买球鞋; 给 n 种鞋, K 种品牌; 有 m 的钱; 每种鞋有一个品牌 a,价格 b,价值 c; 问能买到的最大价值; 其中每种品牌都必须买一双; 不能满足就输出 Impossible ; 理解: 分组背包; 每一种有一个最大的价值; 即每一种用一个 01背包; 然后对于前一种可以推导出后一种的总价值; 即前一种的价值加
2016-09-16 20:03:00
378
原创 Python 图像转字符图像 PIL模板库
利用PIL模板库对图像进行处理 首先利用函数打开图像文件 图像文件的mode是 P 要改为 RGBA 才能回去(R,G,B,A)元组tuple 否则是一个 int 整数 gray 是灰度值计算,计算出哪些地方应该显示什么样的字符 代码如下: #coding: utf-8 from PIL import Image char_arr = list("$@B%
2016-09-05 17:12:01
965
原创 Python 爬虫 简单实例 爬取糗事百科段子
简单实例 爬取糗事百科段子 在命令行中浏览 首先,我们来看下糗事百科的首页:点击打开链接 再查看源码可以看到 我们想要的段子都是这样的: 问:你买过最好的假货是什么?神回答:我曾经买过一本盗版书,竟然把正版书里的个别错别字给改了过来! 这说明只需要用 正则表达式 截取出来就行了 正则表达式:点击打开链接 再看网页的URL,该网页是分页的,所以可以直接枚举页数
2016-09-02 14:57:54
593
原创 python Apache2.4 建立虚拟目录
Apache2.4建立虚拟目录: 此操作耗费了我半天,终于整出来了 这儿只写建立虚拟目录,建立虚拟主机自己百度、google吧 一般来说 我们新建的 html 文件是要放到一个自己的想要的目录里的 而在Apache2.4中,它有一个默认配置,使得默认应该把 html 文件放到 htdcos 中才能访问 将 html 文件放入默认的 htdcos 文件夹中 在浏览器输入
2016-08-31 13:05:51
1212
原创 python cgi编程 windows安装Apache
在 windows 上不容易操作,一般服务器都为unix, linux 首先是要在windows安装Apache 并配置一些环境 1:在官网下载:点击打开链接 点击进入:点击打开链接 点击进入:点击打开链接 点击进入:点击打开链接 上面是x86的:点击打开下载链接1 点击打开下载链接2 下面是x64的:点击打开下载链接1 点击打开下载链接2
2016-08-30 18:55:15
6369
5
原创 hdu1712 分组背包 *
题目链接:点击打开链接 题意: 有个学生要复习 n 个功课; 每个功课有 m 种复习方式; 即:满足一个矩阵; 即:第 i 种功课需要花费 j 天; 理解: 原以为是 01背包; 结果发现有个问题; 即:如果用 1 天复习了该功课, 那么就不能再复习该功课了; 那么就是分组背包的问题了。。。 且看此图片: 图片说的很详细,便不再赘述; 代码
2016-08-14 10:21:04
353
原创 poj3260&&hdu3591 多重背包+完全背包
题目链接: poj:点击打开链接 hdu:点击打开链接 题意: 一个人要买 t 元钱的东西; 他有 n 种钱; 每种钱有 v[i] 的价值; 每种钱有 w[i] 个; 然后他要在花 t 这么多钱的同时用最少的硬币数量; 并且商店找回的硬币数量也是最少的; 如果不能买或者找不回那么多钱就输出 -1; 理解: 两题题意一模一样; 所以放一堆写题解; 并不造怎
2016-08-13 20:51:07
466
原创 poj1276 多重背包
题目链接:点击打开链接 题意: 取款机的问题; 有 n 种钱; 每种钱有 v[i] 的价值; 每种钱有 w[i] 张; 问给定要取得钱 cash 之后能从取款机最多取多少钱; 理解: 多重背包; 直接套模板; 递推式:dp[i] = max(dp[i], dp[i - mul * v[i]] + mul * v[i]); 其中的值根据代码定义; 代码
2016-08-13 16:54:53
301
原创 hdu4501 三维01背包,三个条件
题目链接:点击打开链接 题意: 中文题,不在详述; 理解: 三维01背包; 递推式含义:dp[j][k][l] 表示用 j 的钱和 k 的积分 和 l 的免费次数能买到最大的价值; 递推式:dp[j][k][l] = max(dp[j][k][l], dp[j - a[i]][k][l] + w[i], dp[j][k - b[i]][l] + w[i], dp[j][
2016-08-13 16:47:41
1375
原创 hdu1171 01背包 | 多重背包
题目链接:点击打开链接 题意: 杭电分设备; 有 n 种设备; 每种都不同,每种都有 w[i] 个; 问怎样分才能使分成的两堆只差最少; 理解: 多重背包; 套模板; 递推式:dp[i] = max(dp[i], dp[i - mul * v[i]] + mul * v[i]); 其中的值根据代码定义; 也可以 01背包做; 但是顺手就用了多重背包; 有个
2016-08-13 15:04:24
353
原创 poj1014 多重背包
题目链接:点击打开链接 题意: 与hdu1059的题一模一样; 点击打开链接 理解: 多重背包; 看做01背包会超时; 直接套模板; 与《挑战程序设计》书上多重背包是一样的; 递推式:dp[i] = max(dp[i], dp[i - (i + 1) * mul] + (i + 1) * mul); 其中的值根据程序而定; 具体看hdu1059题解; 但
2016-08-13 13:54:26
318
原创 poj2836 状压dp
题目链接:点击打开链接 题意: 给你 n 个点,然后用矩形去覆盖这些点; 每个矩形最少覆盖两个点; 点可以被重复覆盖; 问最小的覆盖面积是多少; 其中重复面积要重复计算; 理解: 状态压缩dp; 1 超时的做法: 递推式含义:dp[i] 表示 i 这种矩形状态下的最小值; 递推式:dp[v[i] | v[k]] = max(dp[v[i] | v[k]], d
2016-08-12 19:35:46
446
原创 hdu1565 状压dp
题目链接:点击打开链接 题意: 给你一个n*n的格子的棋盘,每个格子里面有一个非负数; 从中取出若干个数,使得任意的两个数所在的格子没有公共边; 就是说所取的数所在的2个格子不能相邻,并且取出的数的和最大; 理解: 状态压缩dp; 也可以用网络流做,但是不会; 递推式含义:dp[i][j] 表示第 i 行为 j 状态时的最大值; 递推式:dp[i][v[j]]
2016-08-11 20:11:37
361
原创 poj3254 状压dp
题目链接:点击打开链接 题意: 给一个 n * m 的矩阵; 其中 0 表示可以在此处种玉米; 1 则相反; 而农夫规定两株玉米不能种在一起; 即一株玉米的上下左右都没有其它玉米; 问有多少种种法; 其中不种也是一种方法; 理解: 状态压缩 dp; 参考:点击打开链接 和 点击打开链接 递推式含义:dp[i][j] 表示在第 i 行的 j 状态有多少种方法;
2016-08-11 16:40:11
251
原创 poj2441 状压dp
题目链接:点击打开链接 题意: 有 n 头牛; 有 m 个棚; 农夫约翰想要把牛关进棚里; 每头牛不会分享同一个棚; 而且每头牛都有自己喜欢的 p 个棚,其他棚都不喜欢; 问要这些牛关进棚可以有多少种方式; 理解: 状态压缩; 递推式含义:dp[i] 表示有 __builtin_popcount(i) 头牛已经关进棚的方式总数; 其中,__builtin_po
2016-08-10 19:44:15
510
原创 Codeforces 106C 多重背包
题目链接:点击打开链接 题意: 有 n 种原料,m 种产品; 其中每种产品有 ai 个高级原料; 生产某种产品需要 bi 个高级原料,ci 个原料; 每件产品有 di 的价值; 其中有种产品是只用原料做成的; 该产品需要 c0 个原料,有 d0 的价值; 求用这些原料能得到的最大价值; 理解: 多重背包模板题; 将所有的物品转化成最多可用 num[i] 个;
2016-08-05 20:36:18
332
原创 Codeforces 414B 统计dp
题目链接:点击打开链接 题意: 寻找一种序列; 1 并且 bi 要整除 b(i + 1); 即:bi | b(i + 1); 给一个 n 和 k; 问在 n 这个范围内,能求出的多少种满足条件的 k 这么长的序列; 理解: 想到了一个 n^3 的方法; 递推式差不多; 但是会超时; 神说是统计 dp; 要优化; 于是从另一个方向推; 递推式含义为:d
2016-08-05 15:21:34
409
原创 poj3046 划分数dp
题目链接:点击打开链接 题意: 有 T 种蚂蚁家庭; 每个家庭 ai 个蚂蚁; 给你一串序列,相同的数字代表是一个家庭; 问你这一串序列能组成多少不同的(1 ~ T)的集合; 理解: 云里雾里; 书上原题; 是 dp 的多重集组合数; 直接套模板; 递推式:dp[i + 1][j] = sigma(dp[i][j - k]); 其中 k 是 [0, min(
2016-08-05 10:22:32
460
原创 poj2392 布尔值型 多重背包
题目链接:点击打开链接 题意: 牛要上太空; 要用砖造一座塔; 每块砖有高度 h_i,数量 c_i,砖放下后的高度不超过 a_i; 求给你的砖能搭建的最高的高度是多少; 理解: 多重背包,只是有些要注意的变化; 递推式含义:dp[i] 表示能否从前一个高度推导过来; 即:dp[i] = (dp[i - h_i] == 1); 其中用过的砖的数量要小于 c_i 个
2016-07-28 15:48:24
318
原创 poj1742 布尔值型 多重背包
题目链接:点击打开链接 题意: 一个人有许多种硬币: A1, A2, A3, A4 .....Ai (1 每一种硬币有许多个: C1, C2, C3, C4.....Ci (1 问他可以用硬币组成多少种不超过 m 的价格; 理解: 这是楼教主的男人必过八题; 可惜了,自己做不来; 神解释说是多重背包; 但是和书上的不一样; 其实递推式才是真正有用的东西;
2016-07-28 15:26:42
384
原创 poj3616 递推
题目链接:点击打开链接 题意: 一只牛要在生产奶,它需要一个计划表; 农夫会有 m 次可能来挤奶; 每一次有起始时间 L,结束时间 R,挤的奶量 E; 而牛产完奶要休息 r 时间; 问如何安排才能得到最多的奶量,求出奶量; 理解: 脑子转不过来; 这儿只有一个像 dp 会使用到的变量 m; 所以要向一维 dp 转换思想; 找出递推式含义:dp[i] 表示以
2016-07-26 16:31:14
315
原创 poj2385 递推
题目链接:点击打开链接 题意: 有一只牛要吃苹果,这也有两棵苹果树; 它摘不到苹果只有等着苹果自己掉下来; 苹果在每一秒都会掉一个下来; 牛就在树下来回跑动接住苹果并吃掉; 苹果一共会掉 T 秒; 牛最多在两棵树之间来回跑动 W 次; 问牛在不超过 W 次之内能最多能吃到多少苹果; 牛最初站在 1 号树下; 理解: 该题一看就知道是 dp 啦; 所以推一
2016-07-26 10:54:56
323
原创 hdu5179 数位dp
题目链接:点击打开链接 题意: 有一种称为“美丽数”,定义为 a[i] % a[j] == 0 (1 j); a[i] 表示第 i 位数字,n 是这个数的位数; 如:931, 9993, 1111 便是美丽数; 而 932, 5421 等是不符合的; 求区间 [L, R] 之间有多少这样的数; 理解: 很容易想到数位dp; 但是又有些要注意的地方; 特别是前导
2016-07-25 16:20:36
442
原创 Python 正则表达式
Python学习: 正则表达式 点击链接查看更多 # # 正则表达式 # # import re # # '\d' 匹配一个数字 '\w' 匹配一个字母或数字 '\s' 匹配一个空白符(如空格、制表符) # 即:'\d\d\d' 可以匹配 '110' # '\w\w\w' 可以匹配 'ACM' # # '.' 匹配任意字符 # 即:'A..' 可以匹配 'ACM'
2016-07-22 15:39:00
311
原创 poj2686 状压dp
题目链接:点击打开链接 题意: 有个人要从一个城市 a 到城市 b; 其中他有 n 张马车票; 每张马车票有一个速度 t[i]; 地图上有 p 条路; 每条路是双向的,并且有个距离 d[i]; 他每走一条路就要花一张马车票; 一张马车票只能用于一条路; 求他所要花的最短时间; 理解: dp 咯。。。 推不出来啊,状态压缩dp; 一看递推式含义就能明白很多了
2016-07-21 20:45:13
350
原创 在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出相对路径
如题; #在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出相对路径 import os #中文文件夹会出错,未能解决 def search(path, s): listfile = [x for x in os.listdir(path) if os.path.isfile(os.path.join(path, x))] for f in
2016-07-20 17:14:47
3499
原创 hdu3555 数位dp
题目链接:点击打开链接 题意: 求[1~n] 中的数字包含 49 序列的个数; 理解: 数位dp啦; 模板一套就行; 参考:这个链接 代码如下: #include #include #include #include #include #include #include #include #include #include #inclu
2016-07-20 15:31:20
173
原创 hdu2089 数位dp
题目链接:点击打开链接 题意: 给定一个区间,求该区间内不含4 和 62 的数字个数; 62 是连续的 理解: 以前做过,暴力枚举的; 现在看了正真的题解,发现是数位 dp ; 因此需要花一番功夫来学习一下了; 所谓数位 dp,就是对于数字的每一位进行加工求解问题; 首先这个递推式的含义便是:开头为 j 的 i 位数的满足条件的个数; 即:在 k = [0,
2016-07-19 20:24:23
311
原创 poj1745 递推
题目链接:点击打开链接 题意: 给 n 个数,判断这些数在任意加减的组合下能否被 k 整除; 理解: 看题懵逼; 坐了俩小时,只有看题解; 还好题解能看懂; 说的是这样的; 首先这些数要通过加减组合起来; 那么他们的余数只要等于了 k,就说明能被整除; 于是给定递推式:前 i 个数的和的余数是否为 j; 即:dp[i - 1][j] == 1的情况下,有:dp
2016-07-19 17:45:34
190
原创 poj3211 转换 01背包
题目链接:点击打开链接 题意: 有个很忙的人要洗衣服; 衣服有 m 种颜色,有n堆; 题目说必须把一种颜色的衣服洗了才能洗其他颜色的; 每一堆衣服都有一个洗的时间和颜色; 每次洗衣服都可以洗两堆; 求洗衣服的最短时间; 理解: 又是一个01背包; 根据题意可知,每一种颜色有一个最短时间值; 求每一种颜色的最短时间值就是用01背包; 就是就算在所有时间中找出和
2016-07-19 11:10:22
335
原创 hdu1059 多重背包
题目链接:点击打开链接 题意: 给6种等级的物品,每种物品有 ni 个; 求是否能平分为两份,其等级之和相等; 当然单独一个物品是不能分成两半的; 理解: 最开始想了下,直接暴力的一个01背包; 就是把这些物品全部按等级值存在一个数组中; 之后用01背包计算; 即:一些数之和一定是小于等于所有的和的一半才能满足两份接近相等的关系; 递推式为:dp[i] = ma
2016-07-19 09:02:18
365
原创 hdu2955 概率dp?
题目链接:点击打开链接 题意: 有个人想偷钱,但是有风险; 求在给定的风险下偷到最多的钱; 理解: 一开始认为是简单的01背包,把概率放大10000倍还是WA。。 然后换思路了,神的理解是; 把风险的另一面拿出来,就是没有风险的一面; 考虑在偷到 x 这么多钱的情况下,最大的没有风险的值位多少; 这样递推式就是:dp[x] = max(dp[x], dp[x -
2016-07-18 17:37:35
278
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅