POJ 1952 BUY LOW, BUY LOWER(DP)
2011-08-20 19:04
459 查看
原文:http://blog.acmj1991.com/?p=606
题意:单调最长递减序列,并且求最长序列的个数
思路:第一次写了一下发现思路不清晰导致临时改动,然后不断的加变量。程序越写越纠结,最后….弄了大半天。实在忍无可忍了于是重写了一下,A了。其实就是比单调最长递减序列多加了一个去重的过程
题意:单调最长递减序列,并且求最长序列的个数
思路:第一次写了一下发现思路不清晰导致临时改动,然后不断的加变量。程序越写越纠结,最后….弄了大半天。实在忍无可忍了于是重写了一下,A了。其实就是比单调最长递减序列多加了一个去重的过程
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; #define maxN 5010 int dp[maxN],key[maxN],num[maxN];//dp记录最长的长度,num记录数量 int max(int x,int y){return x>y?x:y;} int main() { int j,n,maxx=0,cnt=0; scanf("%d",&n); for(int i=1;i<=n;i++) { dp[i]=1,num[i]=1; scanf("%d",&key[i]); for(j=i-1;j>0;j--) if(key[i]<key[j]){ if(dp[i]<dp[j]+1)dp[i]=dp[j]+1,num[i]=num[j]; else if(dp[i]==dp[j]+1)num[i]+=num[j]; } for(int j=i-1;j>0;j--) if(key[i]==key[j]) num[j]=0; } for(int i=1;i<=n;i++) maxx=max(maxx,dp[i]); for(int j=1;j<=n;j++) if(dp[j]==maxx)cnt+=num[j]; printf("%d %d\n",maxx,cnt); }
相关文章推荐
- poj1952(BUY LOW,BUY LOWER)(dp记录方案个数)
- POJ-1952 BUY LOW, BUY LOWER(线性DP)
- POJ-1952 BUY LOW, BUY LOWER(线性DP)
- POJ 1952 C++:BUY LOW, BUY LOWER
- POJ 1952 BUY LOW, BUY LOWER
- POJ 1952 BUY LOW,BUY LOWER 最长递减子序列 动态规划
- POJ 1952 BUY LOW, BUY LOWER DP
- POJ 1952 BUY LOW, BUY LOWER(最长递减序列,去重, 动态规划)
- POJ 1952 BUY LOW, BUY LOWER 动态规划题解
- poj 1952 Buy low, buy lower
- POJ 1952 BUY LOW, BUY LOWER
- POJ 1952 BUY LOW, BUY LOWER
- pku 1952 BUY LOW, BUY LOWER(DP)
- POJ 1952 BUY LOW, BUY LOWER 笔记
- poj 1952 BUY LOW, BUY LOWER【解法一】
- poj 1952 BUY LOW, BUY LOWER【解法一】
- POJ 1952 BUY LOW, BUY LOWER DP记录数据
- poj 1952 BUY LOW, BUY LOWER 最长下降子序列+统计不重复方案数
- poj 1952 BUY LOW, BUY LOWER(求最长下降子序列个数)
- POJ 1952 BUY LOW, BUY LOWER