dp
文章平均质量分 50
IQ_IT
这个作者很懒,什么都没留下…
展开
-
hdu1257 最少拦截系统
求一个序列中不升子序列的个数,贪心思想。和南京理工大学第八届校赛sequence相似,那个题求的是不降子序列个数,可以看一下加深理解题目链接。下面是本题代码:#include #include #includeusing namespace std;const int maxn=30000;int dp[1010],m;int main(){ int n,b;原创 2016-05-02 20:59:10 · 285 阅读 · 0 评论 -
hdu 1024 Max Sum Plus Plus
题意:在一个序列中,求出m个不想交的子序列,使这m个序列的和最大。题意好理解,但递归方程的表示有些令我迷茫看了下大牛们的题解,在这里说一下我的看法。这里我结合代码来说一下: dp[i][j]=Max(dp[i][j-1]+a[j] , max( dp[i-1][k] ) + a[j] ) 0dp[i][j]表示前j个数分成i组时的最大值;dp[i][j-1]+a[j]表原创 2016-05-02 16:20:29 · 468 阅读 · 0 评论 -
hdu 1029 Ignatius and the Princess IV
#include#include#include#includeusing namespace std;int dp[1000010];int main(){ int n,b,num; while(scanf("%d",&n)!=EOF) { num=0; memset(dp,0,sizeof(dp)); int原创 2016-05-02 16:36:45 · 365 阅读 · 0 评论 -
hdu 1069 Monkey and Banana
题意:每行给三个数,可以任意选择为长宽高,求长宽递减,高度和最大的排序方式的高度和。思路就是把所有情况列出来,然后套最长子序列模板就可以了。每行数据可以分成三种情况,开始不理解长度为何取最大值(除去已选的高度值),后来才理解,如果不取最大值,一行数据就不止3种情况了。#include#include#include#includeusing namespace std;str原创 2016-05-02 17:58:17 · 376 阅读 · 0 评论 -
hdu 1087 Super Jumping! Jumping! Jumping!
又是一道模板题!!#include #include const int maxn=1010;int a[maxn],dp[maxn],m,Max;void LICS(){ memset(dp,0,sizeof(dp)); for(int i=0;i<m;i++) { dp[i]=a[i]; for(int j=0;j<i;j++) if(a[原创 2016-05-02 18:08:20 · 329 阅读 · 0 评论 -
hdu 1114 Piggy-Bank
01背包:一定空间内,每种价值的物品有一个完全背包:一定空间内,每种价值的物品可以选无限个多重背包:01背包和完全背包的组合。由题意可知此题为完全背包,然后。。。。套模板#include#includeusing namespace std;int f[100000]; //根据题意,记录f[i]在用了i空间的情况下的最小价值int main(){ int t原创 2016-05-02 18:27:07 · 320 阅读 · 0 评论 -
南京理工校赛 sequence
思路:求一个序列中不降子序列的个数,贪心思想,动规求解#include #include #includeusing namespace std;int dp[10100],m;int main(){ int n,b,t; cin>>t; while(t--) { scanf("%d",&n); m=0;原创 2016-05-02 18:50:25 · 357 阅读 · 0 评论 -
hdu 1260 Tickets
本题考虑当前的人是否和前面的人一起买票,所以有两种可能动规方程:dp[i]=min(dp[i-1]+a[i],dp[i-2]+b[i]);代码如下:#include#include#include#includeusing namespace std;int a[2010],b[2010];int dp[2010];int main(){ int t原创 2016-05-02 20:49:14 · 363 阅读 · 0 评论 -
POJ 2955 Brackets
题意:括号匹配,两个括号能匹配上,和就加二。一道区间dp题,刚刚入门,说一下区间dp的思路,就是:不断遍历整个区间,第一次遍历求出子区间长度为1的区间的最大值,第二次遍历求出子区间长度为2的区间的最大值,以此类推,直到求出区间长度为整个区间的最大值。原创 2016-05-03 14:58:30 · 383 阅读 · 0 评论 -
POJ 1651 Multiplication Puzzle
题意:给你一排数(用数组a表示),最边上的两个数不动,将中间的数全部取出,且每次去一个数。每取一个数a[i],sum就加上三个数的乘积(此时与a[i]相邻的两个数以及a[i])。求最小的sum。区间dp;思路:一段区间a[i]——a[j]中取一个数a[k],若能实现a[i]*a[k]*a[j],则i到k以及k到j之间的数都已取出,若以dp[i][j]记录sum的最小值,则dp[i][j原创 2016-05-04 16:20:21 · 326 阅读 · 0 评论 -
hdu 1176 免费馅饼
这道题题解有很多,但我发现大多数都是错误的,下面是我的理解,恭迎大牛来判别正误。下面我就列举错误代码:#include#include#include#includeusing namespace std ;int a [ 100001 ] [ 12 ] ;int f [ 100001 ] [ 12 ] ;int main () { int n ; while原创 2016-05-02 20:26:40 · 648 阅读 · 0 评论 -
hdu 1160 FatMouse's Speed
题目大意就是求出两条件分别满足上升和下降的最长子序列。解题思路:结构上套模板,细节上的区别有1、想将一个条件排好序,相当于已经判别了一个条件;2,、因为题目要求的是每个数在原序列的位置,所以需要在结构体中提前记录位置,以便于排序后仍能找到位置。另一点是在寻找最长子序列时,记录是由前面哪一个字符发展而来的,以便于能够知道各在排序后的位置。#include #include#inc原创 2016-05-02 15:13:56 · 397 阅读 · 0 评论