1456: 逃票的chanming(3) 时间限制: 2 Sec  内存限制: 128 MB提交: 326  解决: 48[提交][状态][讨论版] 题目描述 这是一个神奇的国度.     这个国度一共有N个城市组成,让我们将他们编号为1~N,     这一天,chanming带着他的第一个月的工资K元来到了城市1.他想到城市N去寻找宝藏.经历了艰难险阻,上刀锅下油山,他终于来到了N市.在这里,他发现了n种宝藏.每一种宝藏有a[i]个.     Chanming是个有情有义的人,他怎么会忘记自己…
不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 25802    Accepted Submission(s): 8967 Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer).杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以…
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=26901#problem/A 题意:有一个 2*n的格子里,你可以选择任意一个格子作为起点,你可以朝着相邻的8个格子行走且一个格子只能被走一次. 问把所有格子都走一遍有多少种方法! 思路: n=1,n=2的时候特判一下. n>2的时候就要分两种情况考虑了,第一种是对旁边四个角考虑,另外一种是对中间的考虑. 开一个b[i]数组表示每个当n为i时顶角有多少种走法, c[i]表示中间…
昨晚搞的第二道矩阵快速幂,一开始我还想直接套个矩阵上去(原谅哥模板题做多了),后来看清楚题意后觉得有点像之前做的数位dp的水题,于是就用数位dp的方法去分析,推了好一会总算推出它的递推关系式了(还是菜鸟,对dp还是很不熟练): dp[i][0/1]表示以0/1开头的不含101且不含111的i位数(用1来表示f,0表示m,看着方便点),然后,状态转移方程是: dp[i][0]=dp[i-1][0]+dp[i-1][1]; //以0开头的话后面接什么数都不成问题 dp[i][1]=dp[i-2][0…
---题面--- 思路: 主要难点在思路的转化, 不能看见要求$\sum{a[i]^2}$就想着求a[i], 我们可以对其进行某种意义上的拆分,即a[i]实际上可以代表什么? 假设我们现在有两种取出某一数列的方法,分别为X,Y.(X,Y可以相同) 那么这样的二元组有多少个呢? a[i]^2个. 因为X的取法有a[i]种,Y的取法也是a[i]种,所以二元组个数实际上就是a[i]^2. 那么这样一转化有什么好处? 方便DP 因为这样的话就不在需要知道具体的a[i]了,因为二元组的个数是可以拆开来算的…
The mook jong Accepts: 506 Submissions: 1281 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) 问题描述 ZJiaQ为了强身健体,决定通过木人桩练习武术.ZJiaQ希望把木人桩摆在自家的那个由1*1的地砖铺成的1*n的院子里.由于ZJiaQ是个强迫症,所以他要把一个木人桩正好摆在一个地砖上,由于木人桩手比较长,所以两个木人桩之间地砖必须大于等…
题意:抛出n次硬币(有顺序),求至少k个以上的连续正面的情况的种数. 思路:转换成求抛n个硬币,至多k-1个连续的情况种数,用所有可能出现的情况种数减去至多k-1个的情况,就得到答案了.此题涉及大数加减. 分析: (1)假设n=k,那么只有一种情况. (2)假设n=k+1,那么有3种情况,包含k个的两种,k+1个的一种. (3)假设k=1,那么只有无正面这一种的情况不能被考虑,其他都能算,那么就是(1<<n)-1种.(n个硬币有2^n种结果) (4)其他情况考虑递推.先把问题的规模降低,最小就…
题目描述: 约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下.由小到大顺序串着由64个圆盘构成的塔.目的是将最左边杆上的盘全部移到右边的杆上,条件是一次只能移动一个盘,且不允许大盘放在小盘的上面.现在我们改变游戏的玩法,不允许直接从最左(右)边移到最右(左)边(每次移动一定是移到中间杆或从中间移出),也不允许大盘放到下盘的上面.Daisy已经做过原来的汉诺塔问题和汉诺塔II,但碰到这个问题时,她想了很久都不能解决,现在请你帮助她.现在有N个圆盘,她至少多少…
power oj 2498 /递推 2498: 新年礼物 Time Limit: 1000 MS Memory Limit: 65536 KBTotal Submit: 12 Accepted: 3 Page View: 61Submit Status Discuss Description 新年快到了,上决╇ф想为小伙伴准备一些新年礼物,他手上有N个独一无二的礼物(礼物之间互不相同)和K个完全相同的礼品盒,他希望将所有的礼物全部送出去且保证每个盒子里都至少有一个礼物,因为谁都不想收到空的礼品盒…
题目描述 n 个沙茶,被编号 1~n.排完队之后,每个沙茶希望,自己的相邻的两 人只要无一个人的编号和自己的编号相差为 1(+1 或-1)就行:  现在想知道,存在多少方案满足沙茶们如此不苛刻的条件.  输入 只有一行且为用空格隔开的一个正整数 N,其中 100%的数据满足 1≤N ≤ 1000;  输出 一个非负整数,表示方案数对 7777777 取模.    样例输入 4 样例输出 2 样例解释:有两种方案 2 4 1 3 和 3 1 4 2   递推方法比较高深,据说与容斥有关:$f_{i…
首先读出题意,然后发现这是一道DP,我们可以获得递推式为 然后就知道,不行啊,时间复杂度为O(n2),然后又可以根据递推式看出这里面可以拆解成多项式乘法,但是即使用了fft,我们还需要做n次多项式乘法,时间复杂度又变成O(n2 * log n),显然不可以.然后又利用c分治思维吧问题进行拆分问题但是,前面求出来的结果对后面的结果会产生影响,所以我们使用cdq分治思想来解决这个问题,时间复杂度变为O(n * log2n). #include<bits/stdc++.h> using namesp…
题意:有一队人(人数 ≥ 1),开头一个人要将消息传到末尾一个人那里,规定每次最多可以向后传n个人,问共有多少种传达方式. 这道题我刚拿到手没有想过 DP ,我觉得这样传消息其实很像 Fibonacci 所举的例子:一个人每次能够跨一或二阶台阶,问到 n 阶台阶有几种跨法.理念是一样的,只不过跨得台阶数可能会变而已.根据 Fibonacci 数列类比过来,每次最多能传 m 人,则 A [ i ] = A [ i - m ] + A [ i - m + 1 ] +  …… + A [ i - 1…
题目大意:给你玩一个一维版的消灭星星,得分是当前消去的区间的长度的平方,求最大得分. 现在分析一下题目 因为得分是长度的平方,不能直接累加,所以在计算得分时需要考虑前一个状态所消去的长度,仅用dp[l][r]来表示区间最大得分是不足以用来转移的. 我们的解决方法是:增加一维预测未来可能会出现的情况,用dp[l][r][t]表示区间[l,r]之后附加t个与r同色的方块时所能得到的最大值.为了降低时间复杂度,我们可以在读入时处理一下,将一段长度为a.颜色为b的区间k表示成一个len[k]=a,col…
Description 由于长期缺乏运动,小黑发现自己的身材臃肿了许多,于是他想健身,更准确地说是减肥. 小黑买来一块圆形的毯子,把它们分成三等分,分别标上A,B,C,称之为“跳舞毯”,他的运动方式是每次都从A开始跳,每次都可以任意跳到其他块,但最后必须跳回A,且不能原地跳.为达到减肥效果,小黑每天都会坚持跳n次,有天他突然想知道当他跳n次时共几种跳法,结果想了好几天没想出来-_- 现在就请你帮帮他,算出总共有多少跳法.    Input 测试输入包含若干测试用例.每个测试用例占一行,表示n的值…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5965 题解: 1. 用a[]数组记录第二行的数字,用dp[]记录没一列放的地雷数.如果第一列的地雷数dp[1]已知,那么第二列的地雷数dp[2]可以确定了(因为a[1] = dp[0] + dp[1] + dp[2], dp[0]虚设), dp[2] = a[1] - dp[0] - dp[1];  于是第三列也已知:dp[3] = a[2] - dp[1] - dp[2]. 所以状态转移方程为:d…
http://codeforces.com/problemset/problem/118/D 设dp[i][j][k1][k2] 表示,放了i个1,放了j个2,而且1的连续个数是k1,2的连续个数是k2 如果这样写,用dfs写是很简单的.但是超时,我记忆化不到 如果用递推写,对于每一个状态,更新到下一个状态. 如果放的是1,那么新的状态是dp[i + 1][j][k1 + 1][0]也就是,用多了一个1,而且连续的个数也增加了.同时,2的连续个数就打破了,变成了0 这种枚举旧状态,更新下一个状态…
Catching the Thief Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 653    Accepted Submission(s): 359 Problem Description In the Qingshui Village, there's a clever thief and a cleverer police. …
Description 存在如下递推式: F(n+1)=A1*F(n)+A2*F(n-1)+-+An*F(1) F(n+2)=A1*F(n+1)+A2*F(n)+-+An*F(2) - 求第K项的值对1000000007取模的结果 Input 单组测试数据 第一行输入两个整数 n , k (1<=n<=100,n < k<=10000000000) 第二行输入 n 个整数 F(1) F(2) - F(n) 第三行输入 n 个整数A1 A2 - An Output 输出一个整数 Sa…
区间dp,可以以一个区间为状态,f[i][j]是第i个切点到第j个切点的木棍的最小费用 那么对于当前这一个区间,枚举切点k, 可以得出f[i][j] = min{dp(i, k) + dp(k, j) | i < k < j} + a[j] - a[i](这一段的长度,也就是这一刀的费用) 然后记住要人为的加入两个切点头和尾 然后因为长区间依赖于短区间,所以要从短区间渐渐推到长区间. 如果是记忆化搜索,那么就是左端点和右端点不断减少,递归,满足. 如果是递推,那么注意区间长度要不断变长,具体看…
折线分割平面 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 31105    Accepted Submission(s): 21012 Problem Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线最多可以将平面…
数字三角形(POJ1163)          在上面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大.路径上的每一步都只能往左下或 右下走.只需要求出这个最大和即可,不必给出具体路径. 三角形的行数大于1小于等于100,数字为 0 - 99 输入格式: 5      //表示三角形的行数    接下来输入三角形 7 3   8 8   1   0 2   7   4   4 4   5   2   6   5 对于空间优化后的具体递推过程如下: 接下里的步骤就按上图的过…
数    位    D    P    开    long    long 首先第一问是转化. 于是就可以二进制下DP了. 第二问是递推,假设最后$n-1$个01位的填法设为$f[i-1]$(方案包括0),于是有fib数列递推关系(很好推),然后矩阵快速幂即可. 一开始思路有点乱,导致边界初始化屡次出错. WA1:见标题赤字. WA2:初始化写错了... #include<iostream> #include<cstdio> #include<cstring> #inc…
传送门 解题思路 可以把原式移项得\(x\)^\(2x\)=\(3x\),而\(x+2x=3x\),说明\(x\)二进制下不能有两个连续的\(1\).那么第一问就是一个简单的数位\(dp\),第二问考虑递推按位做,设\(f(i)\)表示最后一位为\(0\)的答案,\(g(i)\)表示最后一位为\(1\)的答案,那么\(f(i)=g(i-1)+f(i-1)\),\(g(i)=f(i-1)\),整理一下发现\(f(i)=f(i-1)+f(i-2)\),就是斐波那契的形式,直接矩乘即可. 代码 #in…
Computer Transformation Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4561 Accepted: 1738 Description A sequence consisting of one digit, the number 1 is initially written into a computer. At each successive time step, the computer simul…
Security Check Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) Problem Description In airport of Bytetown, there are two long queues waiting for security check. Checking a person needs one minute, and two queues…
(If you smiled when you see the title, this problem is for you ^_^) For those who don’t know KTV, see: http://en.wikipedia.org/wiki/Karaoke_box There is one very popular song called Jin Ge Jin Qu(). It is a mix of 37 songs, and is extremely long (11…
翻zky学长的blog时翻出来的..... 4300: 绝世好题 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 736 Solved: 393 [Submit][Status][Discuss] Description 给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0(2<=i<=len). Input 输入文件共2行. 第一行包括一个整数n. 第二行包括n个整数,第i个整数表示ai. Output 输出…
汉诺塔II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4529    Accepted Submission(s): 2231 Problem Description 经典的汉诺塔问题经常作为一个递归的经典例题存在.可能有人并不知道汉诺塔问题的典故.汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往…
题目链接:http://vjudge.net/contest/136499#problem/F 题意:给你一个硬币,抛掷n次,问出现连续至少k个正面向上的情况有多少种. 一个比较好理解的题解:原题中问出现连续至少k个H的情况,很难下手.我们可以试着将问题转化一下,设dp[i][j]表示抛掷i个硬币出现连续至多j个H的情况种数. 实际上原题中的出现连续至少k个H,即出现连续k个H,k+1个H,...n个H的并集,等价于dp[n][n]-dp[n][k-1],即从连续至多n个H的情况(其实这就是所有…
Tickets Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 972    Accepted Submission(s): 495 Problem Description Jesus, what a great movie! Thousands of people are rushing to the cinema. However,…