又到了期末考试的时候,算法,上机考,10道题
涉及的知识点有:
期中考试的考点:
- dp
- lcs
- lis
- subset sum
- maximum sum
- coin change
- …
记录 Java HashMap 的使用方法
overthewire 是一个 wargame 网站。
其中 Bandit 是最简单的系列,主要是考察一些基本的 Linux 命令行操作。
目前共26关,月初的时候做了一周,还有最后两关没做出来。
不久前看到 Nikkko 在 wooyun 上发了攻略,现在把最后几个搞定,把思路和知识点记录一下,以供参考。
游戏规则:每一关都有一个 login name, IP address(domin), password
前两个已知,通过 ssh 登录到某一关卡,根据信息找到下一关的 password 即可。
每一关的详解记录,参见 Github 笔记
下面给出各关卡的知识点
东南大学的学生办了一场线上CTF,时间为2015年5月17日(周日)10:00至2015年5月24日(周日)10:00
然后呢,当时花了两天答了一些题,趁者官方还没发出完整writeup, 总结下我 PASS 的题目。
题型有五大类,如下:
##引入
晚上在宿舍想看看论文,于是登录图书馆主页,转到知网,结果被告知ip未授权,看来只有内网可以访问那个帐号。
尝试用x-forwarded-for构造ip,失败。
正好发现图书馆登录时的验证码很有趣,找到源码分析一下。
##问题描述
子集和问题(subset sum)描述:
给出一个整数集合 S 和一个整数 N,问 S 中是否存在一个子集合,这个集合里的元素和等于 N
属于01背包问题,下面列举常用的解决方法:
##练习
练习1:UVA 674
有1,5,10,25,50这五种硬币。给一个价值target,求有多少种组合可以得到该价值。
完全背包问题,硬币类型给定,数量不限。
1 | int Count(int n, int m) { |
练习2:UVA 147
和练习1基本一样求方案数,完全背包问题,此题注意浮点数精度问题(加上个0.5)。
1 | num[0] = 1; |
练习3:UVA 166
硬币类型已知,我要去商店买东西。商店硬币数量无限,我携带硬币数量有限,并给出每类硬币具体数量。
给定要付的金额,问付钱找钱过程中最少使用几枚硬币?
商店硬币无限,计算凑i元前最少使用硬币数,即shopmin[i],完全背包问题
我的硬币有限,计算凑i元前最少使用硬币数,即mymin[i],多重背包问题
1 | void countShop(){ |
练习4:UVA 10306
define dp[i][j]: the least coins to make i yuan and j yuan
if i^2+j^2=target^2 then dp[i][j] is a answer
练习5:UVA 10313
define dp[i][j]: the count to use no more than j money coin making up to i yuan
dp[i][j] = dp[i-j][j] + dp[i][j-1]
Loading…
##Reference
背包问题的变化——求方案数
背包九讲