zoukankan      html  css  js  c++  java
  • POJ 1952 BUY LOW, BUY LOWER

    http://poj.org/problem?id=1952

    题目

    你想买股票,方法是每次买的价格都比上一次的低(第一次不受限制)。你预先知道了每天的价格(= =),问最多能买几次,买这么多次产生的价格序列有多少种。

    题解

    难在价格序列的计数上面

    [5quad3quad1quad4quad1]

    可以发现第二个1会重复计算第一个1已经计算过的$5quad3quad1$,那么只需要在计算第二个1时把第一个1的计数设为0就可以避免重复

    AC代码

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #define REP(i,a,b) for(register int i=(a); i<(b); i++)
    #define REPE(i,a,b) for(register int i=(a); i<=(b); i++)
    #define PERE(i,a,b) for(register int i=(a); i>=(b); i--)
    using namespace std;
    #define MAXN 5007
    int a[MAXN];
    int dp[MAXN];
    int cnt[MAXN];
    int main() {
    	int n; scanf("%d", &n);
    	REP(i,0,n) scanf("%d", &a[i]);
    	a[n]=-998; n++;
    	REP(i,0,n) {
    		int now=1;
    		int cc=1;
    		PERE(j,i-1,0) {
    			if(a[i]<a[j] && dp[j]>=now) {
    				now=dp[j]+1;
    				cc=cnt[j];
    			} else if(a[i]<a[j] && dp[j]+1==now) {
    				cc+=cnt[j];
    			}
    		}
    		dp[i]=now, cnt[i]=cc;
    		PERE(j,i-1,0) {
    			if(a[i]==a[j] && dp[i]==dp[j]) {
    				cnt[j]=0;
    			}
    		}
    	}
    	printf("%d %d
    ", dp[n-1]-1, cnt[n-1]);
    }
    
  • 相关阅读:
    recurse_array_change_key_case()递规返回字符串键名全为小写或大写的数组
    php循环创建目录
    ajaxFileUpload增加附加参数
    dedecms5.7 联动类型无法显示
    一些比较隐秘的OJ的网址
    Emacs 配置
    qwq
    233
    [八省联考2018]林克卡特树lct
    [APIO2014]序列分割
  • 原文地址:https://www.cnblogs.com/sahdsg/p/12493669.html
Copyright © 2011-2022 走看看