无穷的数列

找规律

【问题描述】

有一个无穷序列如下:

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的更多相关文章

随机推荐

  1. 用hibernate自动创建mysql表,添加失败org.hibernate.exception.SQLGrammarException

    今天遇到了一个很坑人的问题,从昨晚一直搞到今天早上,终于发现了,先整理下: [背景]:利用hibernate自动给mysql创建一个表,然后为表里面添加一行记录,非常的简单(当然其中还涉及到sprin ...

  2. 【C# 反射泛型】

    C# 反射泛型 摘自:http://www.itwis.com/html/net/c/20110411/10175.html C#泛型反射和普通反射的区别,泛型反射和普通反射的区别就是泛型参数的处理上 ...

  3. 任务调度 QUARTZ

    任务调度在目前的JAVA应用程序中运用的十分普遍,故掌握QUARTZ是必备的技能 闲话少说,上官网:http://www.quartz-scheduler.org/ 下载最新1.80资源包 commo ...

  4. mysql_fetch_row,mysql_fetch_array,mysql_fetch_object,mysql_fetch_assoc区别

    1.mysql_fetch_row  只能以索引下标取值,从0开始. 2.mysql_fetch_array 能以索引下标取值,也可以用字段名称取值. 3.mysql_fetch_object 对象方 ...

  5. Opc

    http://www.tuicool.com/articles/nymUz2 http://blog.chinaunix.net/uid-20692368-id-3434001.html http:/ ...

  6. TopCoder 603 div1 & div2

    div2 250pts MiddleCode 题意:s串长度为奇数时,将中间字符取掉并添加到t末尾:长度为偶数时,将中间两个较小的字符取掉并添加到末尾. 分析:直接做,学习了一下substr(s, p ...

  7. cojs 简单的01串 题解报告

    题意显然是求n位二进制串中不大于其逆序串,取反串,逆序取反串的所有串按字典序排序后的第k个 由于n很小,k很大所以我们可以考虑逐位确定 问题转化为了求方案数,这显然是可以用数位DP做的 设f[len] ...

  8. java retention注解

    Retention注解 Retention(保留)注解说明,这种类型的注解会被保留到那个阶段. 有三个值:1.RetentionPolicy.SOURCE —— 这种类型的Annotations只在源 ...

  9. Windows基于Apache的svn服务器配置

    参照 http://bbs.iusesvn.com/thread-158-1-1.html文章,经过svn的洗刷,终于把它配置成功,现在把我所配置的方法,记录下来,以供其他有需要的朋友参考,需要改进的 ...

  10. 2014-9-17二班----7 web project

    package cn.rwkj.servlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServle ...