称号:c=problem_statement&pm=13283&rd=16009">http://community.topcoder.com/stat?c=problem_statement&pm=13283&rd=16009 參考:http://apps.topcoder.com/wiki/display/tc/SRM+628 開始不知道怎么求期望.普通方法 p1*c1 + p2 *c2 + ... 行不通,看了Editoral才发现原来能够用dp的方法…
2878: [Noi2012]迷失乐园 Time Limit: 10 Sec  Memory Limit: 512 MBSec  Special Judge Submit: 319  Solved: 223 [Submit][Status] Description 放假了,小Z认为呆在家里特别无聊,于是决定一个人去游乐园玩.进入游乐园后,小Z看了看游乐园的地图,发现能够将游乐园抽象成有n个景点.m条道路的无向连通图,且该图中至多有一个环(即m仅仅可能等于n或者n-1). 小Z如今所在的大门也正好…
HDU 5628 Clarke and math 本文属于一个总结了一堆做法的玩意...... 题目 简单的一个式子:给定$n,k,f(i)$,求 然后数据范围不重要,重要的是如何优化这个做法. 这个式子有$n$种问法,而且可以变式扩展,所以说这个式子也是比较重要的: 我们约定如果给定了$n,k$那么我们的$g$写作$g_k(n)$,如果给定了$n,k$中间的任意一个,枚举另一个,或者另一个是变化的,那么另一个数记为$i,j$ 把$1~n$或$1~k$的$g_k(i)$或$g_i(n)$都求出来…
250  想想就发现规律了. 500  暴力,括号匹配. 1000 给一个f数组,如果i存在,那么f[i]也得存在,问这样的集合有多少种. 先拓扑一下,dp[i] = mul(dp[son]+1)最后环里面的元素的乘积是结果. #include <iostream> #include <cstdio> #include <string> #include <algorithm> #include <stdlib.h> #include <v…
被自己蠢哭了.... 250-point problem 国际象棋棋盘上给出两个坐标,问象从一个走到还有一个最少要几步. 黑格象仅仅能走黑格,白格象仅仅能走白格,仅仅要推断两个坐标的颜色是否同样就能推断是否可达,观察棋盘能够发现坐标的奇偶性决定了格子的颜色;可达的情况下最多两步就能达到,所以仅仅要推断格子是否在同一条斜线上即可了. #include<cstdio> #include<iostream> #include<cstdlib> #include<algo…
题目链接:http://hihocoder.com/problemset/problem/1259 题目大意:g(t)=(f(i)%k=t)的f(i)的个数 求所有的(0-k-1)的g(i)的异或总值 思路:首先推出公式3*f(n)*f(2n+1)=f(2n)*(1+3f(n)) 3f(n)和3f(n)+1相邻的两个数肯定是互质的 所以解出f(2n)=3*f(n) f(2n+1)=3*f(n)+1 相当于是n表示成2进制但是每位的权值为3 然后就是数位dp的过程了 dp[k][i][j] k表示…
首先LIS有个$O(n^2)$的DP方法 $f(i,j)$表示前i个数,最后一个数<=j的LIS 如果$a_i!=0$则有 如果$a_i=0$则有 注意因为$f(i-1,j)\leq f(i-1,j-1)+1$,所以上面第二个转移是成立的. 用treap维护这个有两种写法. ①支持区间max=,区间+1. ②只要是只要求单点查询或者最后输出答案的区间操作都是可以用差分的. 这题显然两个条件都满足233 每次对一个区间+1的时候,实际上就是区间后移一位,直接插入一个点即可,然后l所在位置+1,(r…
题意: 给出\(A(2 \leq A \leq 11), n(0 \leq n \leq 10^9), k(1 \leq k \leq 10^9)\). 求区间\([1, A^n]\)中各个数字互不相同的\(A\)进制数而且是\(k\)的倍数的个数. 分析: 如果\(n > A\),根据抽屉原理,\(n\)位\(A\)进制数一定会有重复的数字. 所以下面只讨论\(n \leq a\)的情况. 对于\(k\)的大小,分别使用不同的算法: \(k\)比较小的时候,用状压DP:\(d(S, x)\)表…
题目:http://community.topcoder.com/stat?c=problem_statement&pm=13239&rd=15859 用到了概率论中的贝叶斯公式,而贝叶斯公式中须要用到的概率须要用dp方法求解. 代码: #include <algorithm> #include <functional> #include <numeric> #include <utility> #include <iostream&g…
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6568 题意: 在$0$到$L$的坐标轴运输货物,在每个整数点可能丢失货物,丢失概率为$p$,丢失后可能发现丢失,发现概率为$q$ 在$L$点如果没携带货物一定会发现,求到达$L$的期望路程 数据范围: $1\leq L\leq 100000$ $0< p,q< 1$ 分析: 定义$dp[i]$为在$i$点丢失货物后回到$i$点的期望路程 $dp[L]=0$ $dp[i]=(1-q)\times…
这题不错,可惜我还是太弱了,没想到qwq. 看了网上大佬题解之后写的,对比了一下代码,好像我写的还是挺简洁的(逃,只是吞行比较多). 因为直接用lcm的值做下标会超时,所以我们观察发现可以组成lcm为m的,其实只可能是m的因子.所以我们预处理出所有m的因子放到a数组里.然后开始DP: dp[i][j][k]代表选前i个数,和为j,lcm为a[k]的方案数.假设LCM(a,b)=c,因为知道a和c求b不容易,而知道a和b求c很容易,所以这里我们会采用刷表法. 另外即使我们已经优化了,因为ZOJ卡时…
题目 考虑DP.\(f(msk,i)\) 表示集合 \(msk(一定包含0号点)\) ,选了恰好i条边的连通方案数.转移用容斥,用这个点集内部所有连边方案减去不连通的.令\(|e_{msk}|\)表示两个端点都在集合msk内的边数,D为\(e_{\complement_{msk}sub}\)(sub在msk中补集内部的边集).转移式:\(f(msk,i)=\binom{|e_{msk}|}{i}-\sum_{sub \in msk,0 \in sub,0 \leq j \leq i} f(sub…
先用dfs搜索所有的情况,然后判断每种情况是不是括号匹配 #include <vector> #include <string> #include <list> #include <map> #include <set> #include <deque> #include <stack> #include <bitset> #include <algorithm> #include <func…
题目比较简单. 注意看测试用例2,给的提示 Please note that this is the largest possible return value: whenever there is a solution, there is a solution that uses at most two moves. 最多只有两步 #include <vector> #include <string> #include <list> #include <map&…
做了一道题,对了,但是还是掉分了. 第二道题也做了,但是没有交上,不知道对错. 后来交上以后发现少判断了一个条件,改过之后就对了. 第一道题爆搜的,有点麻烦了,其实几行代码就行. 250贴代码: #include <iostream> #include <cstring> #include <queue> #include <cmath> #include <cstdio> #include <algorithm> #include…
题目:http://community.topcoder.com/stat? c=problem_statement&pm=10409&rd=15854 利用高斯消元求线性空间的基,也就是求矩阵的秩. 代码: #include <algorithm> #include <functional> #include <numeric> #include <utility> #include <iostream> #include &l…
题目:http://community.topcoder.com/stat?c=problem_statement&pm=10554&rd=15855 符合条件的集中非1的元素个数是非常少的,能够用回溯加剪枝.实际执行速度非常快. 代码: #include <algorithm> #include <functional> #include <numeric> #include <utility> #include <iostream&…
最长回文子序列 int lpsDp(char * str,int n){ int dp[n][n], tmp; memset(dp,0,sizeof(dp)); for(int i=0; i<n; i++) dp[i][i] = 1; // i 表示 当前长度为 i+1的 子序列 for(int i=1; i<n; i++){ tmp = 0; //考虑所有连续的长度为i+1的子串. 该串为 str[j, j+i] for(int j=0; j+i<n; j++){ //如果首尾相同 i…
Arithmetic Sequence Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 51  Solved: 19[Submit][Status][Web Board] Description Giving a number sequence A with length n, you should choosingm numbers from A(ignore the order) which can form an arithmetic sequ…
Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 32044    Accepted Submission(s): 14425 Problem Description Nowadays, a kind of chess game called “Super Jumping!…
Maximum Subarray Find the contiguous subarray within an array (containing at least one number) which has the largest sum. For example, given the array [−2,1,−3,4,−1,2,1,−5,4],the contiguous subarray [4,−1,2,1] has the largest sum = 6. click to show m…
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 用于项目中dp.px.sp之间的转换以及指定缩放值下的转换. 效果图 暂不需要 代码分析 常用的方法是px2dip.dip2px: px2dipRatio.dip2pxRatio方法的应用场景可以理解为一个占满全屏的控件,要求等比例缩放显示到占原屏幕0.95的容器中.此时,可以考虑 使用这两个方法对这个控件的宽度和高度值进行等比例缩放. 使用步骤 一.项目组织结构图 注意事项: 1.导入类文件后需要change包名以及重新imp…
算法-动态规划DP小记 动态规划算法是一种比较灵活的算法,针对具体的问题要具体分析,其宗旨就是要找出要解决问题的状态,然后逆向转化为求解子问题,最终回到已知的初始态,然后再顺序累计各个子问题的解从而得到最终问题的解. 关键点就是找到状态转移方程和初始边界条件,说白了就是要找到"递推公式"和初始值,然后计算时保存每一步中间结果,最后累加判断得到结果. 0.求数组最值 求数组最值方法很多,这里使用动态规划的思想来尝试处理,以便更好地理解DP的思想.为了方便这里假设数组a[i]大小为n,要找…
这两题是一模一样的``` 题意:给了一系列递推关系,但是由于这些递推很复杂,所以递推起来要花费很长的时间,所以我要编程序在有限的时间内输出答案. w(a, b, c): 如果a,b,c中有一个值小于等于0,那么w(a, b, c)的值为1 如果a,b,c中有一个值大于20,那么w(a, b, c)的值为w(20, 20, 20) 如果a<b<c,那么w(a, b, c)=w(a, b, c-1) + w(a, b-1, c-1) - w(a, b-1, c) 否则w(a, b, c)=w(a-…
描述 小Hi希望压缩一个只包含大写字母'A'-'Z'的字符串.他使用的方法是:如果某个子串 S 连续出现了 X 次,就用'X(S)'来表示.例如AAAAAAAAAABABABCCD可以用10(A)2(BA)B2(C)D表示. 此外,这种压缩方法是可以嵌套的,例如HIHOHIHOCODERHIHOHIHOCODER可以表示成2(2(HIHO)CODER). 对于一个字符串 S ,合法的压缩表示可能有很多种.例如AAAAAAAAAABABABCCD还可以表示成9(A)3(AB)CCD.小Hi希望知道…
Leetcode之动态规划(DP)专题-931. 下降路径最小和(Minimum Falling Path Sum) 给定一个方形整数数组 A,我们想要得到通过 A 的下降路径的最小和. 下降路径可以从第一行中的任何元素开始,并从每一行中选择一个元素.在下一行选择的元素和当前行所选元素最多相隔一列. 示例: 输入:[[1,2,3],[4,5,6],[7,8,9]] 输出:12 解释: 可能的下降路径有: [1,4,7], [1,4,8], [1,5,7], [1,5,8], [1,5,9] [2…
Leetcode之动态规划(DP)专题-53. 最大子序和(Maximum Subarray) 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6. 进阶: 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解. 定义:dp[i] 表示从起点到index=i的这个段内的最大子序和. 例如:d…
120. Triangle 我的解法用了一个二维数组,这样比较浪费空间.O(n*n) 但是标准答案自底向上,一是不需要进行特别判断,二是可以覆盖数组,则只需要O(n)的空间大小. class Solution { public int minimumTotal(List<List<Integer>> triangle) { int size = triangle.size(); if(size == 1) return triangle.get(0).get(0); int[][]…
903. DI 序列的有效排列 public int numPermsDISequence(String S) { int n=S.length(); int [][]dp=new int [n+1][n+1]; dp[0][0]=1; int M=(int) (Math.pow(10, 9)+7); //dp[i][j]i表示取到s的下标,j表示结尾取的数值 for(int i=0;i<n;i++){ if(S.charAt(i)=='I'){ for(int j=1;j<=i+1;j++)…
SRM 623 DIV2 1000pt 题意:给出一个最多50*50的矩阵,每个单元可能为'.'.'P'.'A','.'代表空地,你每次操作可以把一个P或者A拿到空地上,求一个最大的含有相同字符的矩形面积,最多K次操作. 首先用一个数组预处理出所有矩形所包含这三种字符的数量,然后枚举每一个矩形,如果只含有相同字符,那么这个面积是可以取到的. 如果含有多种字符,枚举含哪种字符时所需操作最少,大矩阵内如果含有一个及以上空地并且这个矩形的面积是小于等于你当前枚举的字符的数量,操作数=矩形内空地数+令一…