poj 1609 dp(堆积木能达到的最高层)
2015-01-28 21:29
162 查看
题意:给出一列数对 ,求出其最长的不减序列的长度。
思路:最简单的思路是采用lis,dp实现,nlogn的复杂度(注意不减和递增的区别,二分查找的条件要进行改变)。网上看到针对此题的另一种思路,直接对数据进行dp:此题的数据范围为1~100,对数据dp的复杂度为O(100*100)。
lis的代码:
数据dp代码:
思路:最简单的思路是采用lis,dp实现,nlogn的复杂度(注意不减和递增的区别,二分查找的条件要进行改变)。网上看到针对此题的另一种思路,直接对数据进行dp:此题的数据范围为1~100,对数据dp的复杂度为O(100*100)。
lis的代码:
#include <stdio.h> #include <string.h> #include <stdlib.h> #define max(a,b) ((a)>(b)?(a):(b)) #define N 10005 struct point{ int a,b; }s ; int n,dp ; int search(int x,int high){ int low,mid; low = 0; while(low <= high){ mid = (low + high)>>1; if(dp[mid] <= x) low = mid+1; else high = mid-1; } return low; } int lis(){ int i,j,len = 0; dp[0] = s[0].b; for(i = 1;i<n;i++){ j = search(s[i].b,len); dp[j] = s[i].b; if(j > len) len++; } return len+1; } int cmp(const void *x,const void *y){ if((*(struct point *)x).a == (*(struct point *)y).a) return (*(struct point *)x).b - (*(struct point *)y).b; return (*(struct point *)x).a - (*(struct point *)y).a; } int main(){ while(scanf("%d",&n) && n){ int i; memset(s, 0, sizeof(s)); memset(dp, 0, sizeof(dp)); for(i = 0;i<n;i++) scanf("%d %d",&s[i].a,&s[i].b); qsort(s,n,sizeof(struct point),cmp); printf("%d\n",lis()); } printf("*\n"); return 0; }
数据dp代码:
#include <stdio.h> #include <string.h> #define max(a,b) ((a)>(b)?(a):(b)) #define N 105 int s ,dp ; int n; int main(){ while(scanf("%d",&n) && n){ int i,j,a,b; memset(s, 0, sizeof(s)); memset(dp, 0, sizeof(dp)); for(i = 0;i<n;i++){ scanf("%d %d",&a,&b); s[a][b]++; } for(i = 1;i<=100;i++) for(j = 1;j<=100;j++) dp[i][j] = max(dp[i-1][j] ,dp[i][j-1])+s[i][j]; printf("%d\n",dp[100][100]); } printf("*\n"); return 0; }
相关文章推荐
- Tiling Up Blocks - POJ 1609 dp
- (复习)poj 1609 简单dp
- poj 动态规划DP - 1609 Tiling Up Blocks
- poj 2241 简单dp(最高巴比伦塔)
- poj 1609 Tiling Up Blocks dp入门之记忆化搜索
- poj 1609 dp
- poj 1609 DP二分没A掉!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- POJ 1609 简单dp
- poj 1770 Special Experiment (树形dp)
- poj-3616 Milking Time (区间dp)
- Check the difficulty of problems - poj 2151 (概率+DP)
- POJ 3042 Grazing on the Run 区间dp
- POJ 2411 Mondriaan's Dream (轮廓线DP代码详解)
- POJ 2404 Jogging Trails [DP 状压 一般图最小权完美匹配]
- poj 3280 Cheapest Palindrome 区间dp
- POJ 3356 AGTC(dp之公共最长子序列)
- POJ_S1E02_Recursion&DP(3)
- POJ 1745 dp
- POJ_1837 Balance (dp)
- Poj 2096 Collecting Bugs (概率DP求期望)