04day1
无穷的数列
找规律
【问题描述】
有一个无穷序列如下:
110100100010000100000…
请你找出这个无穷序列中指定位置上的数字。
【输入】
第一行一个正整数 N,表示询问次数;接下来的 N 行每行一个正整数 Ai,Ai 表示在序列中的位置。
【解题过程】
找规律就好了。对于一个给定的位置 P,可以发现如果 P 上的数字是 1,那么必然满足 P-1 = x*(x+1)/2,那么判断这个方程是否有整数解即可(开平方取整再乘)。
1 次 AC。
方程
动态规划
【问题描述】

【输入】
第一行是 n 和 c。
第二行是 n 个数,分别表示 a1, a2, ..., an。
【输出】
输出解的组数(结果对 999983 取模)。
【解题过程】
一开始真的没思路啊,刚好数学在上排列组合,有个神奇的「隔板法」,差点误入歧途。
然后想到了一个很奇葩的方法,用 f[i] 表示用这个式子组成 i 这个值有几组解,则
f[i] = sum{ f[i-a[j]], 1<=j<=n }
看上去有点道理,然后其实是错的。这种状态转移的方式无法判断重复的情况,比如 b1 取 1,b2 取 1 是可以由两种情况(1, 0 和 0, 1)推过来的,加的时候也就多加了。
然后居然想了将近一个小时才想到正解,我也是醉了。
用 f[i][j] 表示用 a1, a2, ..., ai 来组成 j 有多少组解,则
f[i][j] = f[i-1][j] + f[i-1][j-a[i]], 1<=j<=n
然后如果用上滚动数组的话,最后表现出来的代码与上面那种错误方法几乎完全一样,只是外循环和内循环调换了一下。
然后听到 lzw 大神说无限背包。然后就没有然后了。
1 次 AC。
交错匹配
动态规划
【问题描述】
有两排非负整数 A[1..N],B[1..M],如果 A[i]=B[j]=k,那么可以在 A[i]和 B[j]之间连一条线,称为一条 k 匹配,每个数至多连一条线。另外,每个 k 匹配都必须恰好跟一个 r 匹配相交,且 k≠r。现在要求一个最大的匹配数。
例如:以下两行数的最大匹配数为 8.一个数最多只能和一个数连线。

【输入】
输入文件第一行包含两个正整数 n 和 m。
第二行 n 个自然数,表示 a[i]。
第三行 m 个自然数,表示 b[i]。
【数据规模】
30%的数据满足 n,m≤30。
60%的数据满足 n,m≤200。
100%的数据满足 n,m≤1000,0<所有数≤32767。
【解题过程】
看到什么最大匹配的还以为是二分图,吓了一小跳。
然后从数据范围来看几乎可以肯定是 O(mn) 的动态规划。
借鉴 LCS 的状态表示,用 f(i, j) 表示 a1, ..., ai 与 b1, ..., bj 之间的最大匹配数,那么我们只要考虑 ai 与 bj 是否需要进行匹配。如果要进行匹配,那么只要在 bj 的左边找与 ai 匹配的数、在 ai 的左边找与 bj 匹配的数就能保证两个匹配相交。很明显,对于 ai 找 bj 左边距离 bj 最近的那个匹配才可能是最优解,对于 bj 也应该找 ai 左边最近的匹配。这个找匹配的过程我们可以事先进行预处理。用 p(i, j) 表示 ai 在 b1, b2, ..., bj 中离 bj 最近的那个匹配所在的位置,则可以进行递推:
若 ai=bj,则 p(i, j) = j
否则,p(i, j) = p(i, j-1)
然后可以用 q(j, i) 表示 bj 在 a1, a2, ..., ai 中离 ai 最近的那个匹配的位置,递推过程类似。
然后就可以写出状态转移方程了,
f(i, j) = max{ f(q(j, i-1)-1, p(i, j-1)-1), f(i-1, j), f(i, j-1), f(i-1, j-1) }
初始得分 90 分。原因是把递推的嵌套循环范围写错了(这样也能拿 90 分?)。
04day1的更多相关文章
随机推荐
- 平常写css网页制作时最实用的九条CSS技巧
一.使用css缩写 使用缩写可以帮助减少你CSS文件的大小,更加容易阅读.css缩写的主要规则请参看<css基本语法>. 二.明确定义单位,除非值为0 忘记定义尺寸的单位是CSS新手普遍的 ...
- [vijos 1770]大内密探
描述 在古老的皇宫中,有N个房间以及N-1条双向通道,每条通道连接着两个不同的房间,所有的房间都能互相到达.皇宫中有许多的宝物,所以需要若干个大内密探来守护.一个房间被守护当切仅当该房间内有一名大内密 ...
- MySQL 5.7原生JSON格式支持
在MySQL与PostgreSQL的对比中,PG的JSON格式支持优势总是不断被拿来比较.其实早先MariaDB也有对非结构化的数据进行存储的方案,称为dynamic column,但是方案是通过BL ...
- UVA 291 The House Of Santa Claus (DFS求一笔画)
题意:从左下方1开始,一笔画出圣诞老人的屋子(不过话说,圣诞老人的屋子是这样的吗?这算是个屋子么),输出所有可以的路径. 思路:贴代码. #include <iostream> #incl ...
- Ubuntu环境下手动配置ant
配置ant 1. 下载ant(http://ant.apache.org/bindownload.cgi) 例如我下载的是:apache-ant-1.9.4-bin.tar.gz 解压ant,将文件夹 ...
- 深入理解JVM—Java 6 JVM参数配置说明
原文地址:http://yhjhappy234.blog.163.com/blog/static/316328322011119111014657/ 使用说明< xmlnamespace pre ...
- Java并发:Callable、Future和FutureTask
Java并发编程:Callable.Future和FutureTask 在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口. 这2种方式都有一 ...
- 从零开始,让你的框架支持CocoaPods
本文为投稿文章,作者:奴良(简书) 这两天一直琢磨着想让自己的一个照片多选框架支持CocoaPods下载安装,就搜了好多资料,但是搜到的资料大多都是最基本的,并没有解决我遇到的问题,问题如下: 当自己 ...
- VC程序查错之内存访问异常
作者:langouster 先来看下面这张图,相信很多程序员都见过类似. ---------------------------test1.exe - 应用程序错误------------------ ...
- iOS iOS7越狱
1.使用盘古越狱工具 (或者PP助手) 2.越狱成功后需要安装Apple File Conduit “2”,用于替代afc2add插件 3.安装AppSync插件 (绕过系统验证,随意安装.运行破解的 ...