dp
文章平均质量分 62
wust_tanyao
这个作者很懒,什么都没留下…
展开
-
Leetcode 198. House Robber 213. House Robber II 337. House Robber III
198. House Robber用滚动数组实现O(1)空间需要注意的是更新时index的处理class Solution {public: int rob(vector<int>& nums) { int n = nums.size(); vector<int> v(3, 0); for...原创 2018-08-21 14:54:50 · 271 阅读 · 0 评论 -
hdu3485 Count 101
还是觉得我的代码比较好看~i位数的情况就是把i-1位的情况乘2(i-1位数前面加0或1),再减去出现101前缀的情况,这种情况的个数=i-2位时1开头的个数,递推就行啦#include #include #include #include #include #include #include #include #include #define inf 0x3f3f原创 2014-03-25 18:47:29 · 919 阅读 · 0 评论 -
zoj 1102 Phylogenetic Trees Inherited
数据结构好重要啊!先回去睡觉 明天再来解释题目。。#include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f#define ll __int64using namespace std;int ans,p[2060];ch原创 2014-02-17 22:14:09 · 1099 阅读 · 0 评论 -
hdu 1421 搬寝室
题意:。。。是中文思路:简单的dp,以后看到dp决不能退缩!dp[i][j]表示前i个物品取j对最小疲劳度,这样递推方程就好说了,对第i个物品:取:i肯定只会和i-1一起搬,dp[i][j]=dp[i-2][j-1]+(w[i]-w[i-1])*(w[i]-w[i-1])不取:dp[i][j]=dp[i-1][j]初始化啥的注意下就好了#in原创 2014-02-28 16:08:19 · 1099 阅读 · 2 评论 -
hdu 1081 To The Max
给一个n^2矩阵 求一个和最大的子矩阵先预处理行或者列的和 然后很好的转化成一维dp这里我的 mp[i][j] 表示i行前j个数的和dp的过程就是 枚举列的首尾这样 相当于把每一行当成一个数 dp求最大和 就是一个简单的问题了#include #include #include #include #include #include #include #in原创 2014-02-16 22:12:48 · 796 阅读 · 0 评论 -
hdu 1080 Human Gene Functions --- LCS问题变形
题意:两个字符串 包含 A T C G - 五种字符 两两之间对应一个数值给两个字符串 可以向其中添加一定的- 要使两字符串对应分值和最大 求该值很好的LCS变形。。dp[i][j]表示s1前i位和s2前j位所能构成的最大值那么 如何递推呢 根据题意比较到 i j 位时 此时可以有三种情况1、s1[i] 对应 -2、s2[j] 对应 -3、s1[i]原创 2014-02-16 22:21:22 · 911 阅读 · 0 评论 -
poj 2533 && zoj 2136 Longest Ordered Subsequence --- LIS模板
zoj多输了个test。。#include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f#define ll __int64using namespace std;int a[1010],dp[1010],n,i,j,原创 2014-02-11 22:50:24 · 994 阅读 · 0 评论 -
poj 3176 Cow Bowling
数塔水呀嘛水博客~#include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f#define ll __int64using namespace std;int dp[400][400],n,i,j;int main(){原创 2014-02-11 22:45:50 · 948 阅读 · 0 评论 -
poj 1458 Common Subsequence --- LCS模板
#include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f#define ll __int64using namespace std;char s1[10050],s2[10050];int dp[10050][10050]原创 2014-02-10 23:35:17 · 816 阅读 · 0 评论 -
poj 1159 Palindrome --- LCS减内存
int超内存 要用short或者滚动数组滚动数组#include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f#define ll __int64using namespace std;char s1[5050],原创 2014-02-10 23:42:35 · 885 阅读 · 0 评论 -
poj 2479 Maximum sum
#include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f#define ll __int64using namespace std;int t,n,sum,ans,i,l[50050],r[50050],a[50050];原创 2014-02-10 23:34:03 · 804 阅读 · 0 评论 -
poj1014 hdu1059 Dividing 多重背包
有价值为1~6的宝物各num[i]个,求是否能分成价值相等的两部分。#include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f#define ll long long#define mod 1000000007usi原创 2014-04-27 00:08:06 · 894 阅读 · 0 评论 -
poj2063 Investment 完全背包
#include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f#define ll long long#define mod 1000000007using namespace std;int ans,t,n,V,year,i原创 2014-04-26 19:00:52 · 738 阅读 · 0 评论 -
dd大牛的《背包九讲》
P01: 01背包问题 题目 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 基本思路 这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。 用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便转载 2014-01-17 15:58:30 · 851 阅读 · 0 评论 -
Facebook Hacker Cup 2015 Round 1 --- Winning at Sports
In the game of Sports, the object is have more points than the other team after a certain amount of time has elapsed. Scores are denoted by two hyphen-separated integers. For example, scores may inclu原创 2015-01-19 15:27:28 · 1356 阅读 · 0 评论 -
zoj3822 Domination 概率dp --- 2014 ACM-ICPC Asia Mudanjiang Regional Contest
一个n行m列的棋盘,每次可以放一个棋子,问要使得棋盘的每行每列都至少有一个棋子 需要的放棋子次数的期望。dp[i][j][k]表示用了k个棋子共能占领棋盘的i行j列的概率。那么对于每一颗棋子,在现有的棋盘上,它可能有四种影响:新占了一行,新占了一列,既占了新的一行又占了新的一列,无影响。对于每一种情况,dp[i][j][k]=原始状态的概率×选到这样的位置的概率最后算答案的时候原创 2014-10-17 15:22:34 · 1104 阅读 · 0 评论 -
zoj3605 Find the Marble --- 概率dp
n个杯子,球最开始在s位置,有m次换球操作,看到了k次,看的人根据自己看到的k次猜球最终在哪个位置,输出可能性最大的位置。dp[m][k][s]表示前m次操作中看到了k次球最终在s的频率。#include#includeint n,m,k,s,x[55],y[55];long long dp[55][55][55];int main(){ int i,j,原创 2014-10-17 11:06:28 · 975 阅读 · 0 评论 -
hdu4331 Image Recognition 就暴力啊。。啊。。
题意:给一个1和0组成的正方形矩阵,求 四条边都由1构成的正方形的个数。方法:先统计矩阵中每一点,向四个方向,最多有多少个连续的1,这里用dp做也与此同时,顺便求下 能向右下和 左上 两个方向 形成的最大的正方形的边长 (就是里面的d1[][] d2[][])为什么朝这俩方向呢,这样方便统计最长的连续的1啊,四个方向一起好像不行啊然后枚举边长,就没了比赛原创 2013-08-08 19:50:42 · 1242 阅读 · 0 评论 -
hdu5000 Clone
每个人有n种属性,每种属性的范围是[0,Ti],若存在两个人,其中一个人的所有的属性均给出n种属性的范围,求最多能存活多少人。这题重点是要发现,共存最多的人的属性值和相等。假如有两个人可以共存,他们属性和不等,那么一定能找到一个 属性和与其中一个相等 的人,且和另外一个不共存。也可以发现,sumTi/2时,可以共存的人最多。题目里面又说。。sum of T[i]原创 2014-09-23 12:05:20 · 811 阅读 · 0 评论 -
hdu4906 Our happy ending --- 状压dp
给一个n个数的数列,从中取一些数构成新数列,如果新数列中有一些数的和是k,那么这就是一个好数列,问这样的数列的个数。从1~n位枚举其取值从1~min(l,k),来更新可达状态。dp[i]中i的二进制每一位表示和(1~k),1表示可以取到,0表示取不到。#include #include #include #include #include #i原创 2014-08-03 11:20:38 · 969 阅读 · 0 评论 -
zoj3795 Grouping --- 强连通,求最长路
给定图,求把至少把图拆成几个集合能够使集合内的点没有直接或间接关系。首先由题意可得图中可能含环,而环里面的点肯定是要拆开的。缩点建图得DAG图,可以想象一下。。把图从入度为零的点向下展开,位于同一层的点放在一个集合是没有关系的,那么题目所求的问题就转化成求图中最长路的问题了。接下来就跟 这题 一模一样了。。#include #include #include原创 2014-07-01 17:08:05 · 1070 阅读 · 0 评论 -
hdu2159 Fate 二维背包
#include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f#define ll __int64using namespace std;int n,v,k,s,dp[110][110],w[110],c[110];int main(){原创 2014-06-27 00:51:20 · 737 阅读 · 0 评论 -
hdu2844 Coins 多重背包
#include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f#define ll __int64using namespace std;int n,m,dp[100010],a[100010],c[1010];void pack01(int c原创 2014-06-27 00:50:05 · 826 阅读 · 0 评论 -
hdu 4352 XHXJ's LIS --- 数位dp 状态压缩
dp[i][j][k]表示当前位是第i位 选取状态为j 要求长度为k 的个数#include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f#define ll __int64using namespace std;ll原创 2014-02-09 16:23:40 · 1037 阅读 · 0 评论 -
hdu 2089 不要62 --- 数位dp
简单题bool six保存上一位是不是6 #include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f#define ll __int64using namespace std;int dp[15][2],num原创 2014-02-09 17:33:54 · 872 阅读 · 0 评论 -
hdu4336 Card Collector 概率dp(或容斥原理?)
题意:买东西集齐全套卡片赢大奖。每个包装袋里面有一张卡片或者没有。已知每种卡片出现的概率 p[i],以及所有的卡片种类的数量 n(1问集齐卡片需要买东西的数量的期望值。一开始,自己所理解的期望值是原来学过的 一个值*它自身发生的概率,这没错,但是不知道在这一题里面 那个值是多少经过重重思考和挣扎最后明白了,这一题中,n就是那个值,也是你要求的,感觉理解这个原创 2013-08-08 08:52:08 · 1458 阅读 · 0 评论 -
hdu4433 locker
暴力dp。。dp[i][j][k] 表示 前i位完全匹配 j 表示i+1位 k表示i+2位 枚举j k#include#include#include#include#include#includeusing namespace std;char s1[1005],s2[1005];int dp[1005][10][10];int main(){原创 2013-08-19 15:20:50 · 963 阅读 · 0 评论 -
hdu4105 Electric wave
题意;给一串连续的数 向其中加空格 使之分成符合 波谷 波峰 波谷 波峰。。依次排列的数波谷即与之相邻两数比它大 波峰即相邻的数比它小dp[i][j][0、1] 表示以第 i 到第 j 位之间表示的数为波谷或波峰所得到的最大值dp方程: int tmp=is(i,j,k,p);// 求 i 到 j 之间构成的数 是否可以作为 k 到原创 2013-08-07 13:50:01 · 967 阅读 · 0 评论 -
POJ1837 Balance
题目大意:有一个天平,天平左右两边各有若干个钩子,总共有C个钩子,有G个钩码,求将钩码全部挂到钩子上使天平平衡的方法的总数。其中可以把天枰看做一个以x轴0点作为平衡点的横轴dp思路:每向天平中方一个重物,天平的状态就会改变,而这个状态可以由若干前一状态获得。首先定义一个平衡度j的概念:当平衡度j=0时,说明天枰达到平衡,j>0,说明天枰倾向右边(x轴右半轴)原创 2013-08-05 15:08:05 · 793 阅读 · 0 评论 -
hdu1176 免费馅饼
简单dp题目要求:求dp[0][5]到dp[t][]的最大值类似数塔 只不过1~9号位有三个方向可以选 0和10只有两个可将所有的时间段和馅饼看成是一个矩阵,时间就是行数,掉馅饼的就是列数,则就是数字三角形问题,从最底层找一条路径,使得路径上的和最大。dp[i][j] 表示 i 时刻 j位置的最大值开始搞不懂为什么要for t->0 for 1->10 然后就得到dp[原创 2013-08-05 12:17:00 · 931 阅读 · 0 评论 -
hdu1421 搬寝室
简单dp把重物按质量大小排序一个物品只有可能跟其质量相邻的物品一起拿 质量差的平方才最小dp[i][j]表示在前 i 个物品中取 j 对所需最小疲劳度dp方程:dp[i][j]=min(dp[i-1][j],dp[i-2][j-1]+(wi-w[i-1])*(wi-w[i-1])); 看取或者不取前两个物品的疲劳度大小#include#include#i原创 2013-08-05 12:01:03 · 1063 阅读 · 0 评论 -
poj3254 Corn Fields (状态压缩dp)
Corn FieldsTime Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64uDescriptionFarmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 1原创 2013-07-05 10:40:05 · 774 阅读 · 0 评论 -
poj 1088 滑雪(简单dfs)
给一个矩阵 任选起点终点 求最长的递减的数列有多长#include#include#includeusing namespace std;int dr[4]={-1,1,0,0},dc[4]={0,0,-1,1};int h[110][110];//记每个点高度int len[110][110];int r,c;bool over(int a,int b)//判断原创 2013-07-08 16:42:04 · 817 阅读 · 0 评论 -
hdu3001 Traveling (三进制状态压缩dp)
【题目大意】10个点的TSP问题,但是要求每个点最多走两边,不是只可以走一次,所以要用三进制的状态压缩解决这个问题。可以预处理每个状态的第k位是什么。【解析】和tsp问题相同,类似于上面那个题【状态转移方程】dp[j][i]=min(dp[j][i],dp[k][l]+map[k][j]); j表示终点 i为二进制表示状态 1表示经过 0表示不经过 把所有可能的路径排列原创 2013-07-08 16:13:53 · 1068 阅读 · 2 评论 -
poj 2342 Anniversary Party(树形dp)
题意:给一些人1到n 要去参加一个party 每个人有自己的开心值 但是这些人之间有领导关系要求 每个人不能直接和自己的领导一起参加 求 使满足要求的最大总开心值解题方法:把领导关系建树 从根节点往下递归dp[i][1] 表示选择i结点的最大值,dp[i][0]表示不选i结点的最大值。则方程为 dp[i][1] += dp[i的所有孩子][0] (依题意,原创 2013-07-06 09:14:35 · 816 阅读 · 0 评论 -
poj 2923 Relocation(状态压缩dp+背包)
RelocationTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 1479 Accepted: 597DescriptionEmma and Eric are moving to their new house they bought after r原创 2013-07-03 23:40:43 · 1371 阅读 · 2 评论 -
codeforces 132C Logo Turtle--- dp dfs
题意:F表示前进一步,T表示变成反方向给一串FT字符,和一个n,表示可以改变多少次改变就是F变成T、T变成F关键:dfs(int d,int pos,int i,int cnt) dp[][][][] 依次表示,方向、最长距离、到字符串的哪一个点了、还剩多少改变次因为你每到一步,下一步只有两种情况:一种是方向改变,pos不变一种个是方向不变,pos朝原创 2013-08-09 11:28:57 · 1398 阅读 · 0 评论 -
poj1934 Trip
TripTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 2773 Accepted: 703DescriptionAlice and Bob want to go on holiday. Each of them has planned a route原创 2013-08-13 16:07:12 · 914 阅读 · 0 评论 -
poj1920 Towers of Hanoi
关于汉诺塔的递归,记住一个结论是,转移n个盘子至少需要2^n-1步#include#include#include#include#include#includeusing namespace std;int two[100005],pos[100005];int main(){ int n,nn[5],i,j,ans,now,end,mid,a;原创 2013-08-16 16:34:31 · 988 阅读 · 0 评论 -
hdu 1505 City Game
预处理h[i][j] 表示i j 位置向上最多到哪l r表示向左向右。。#include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f#define ll __int64using namespace std;in原创 2014-02-09 21:07:55 · 743 阅读 · 0 评论