poj 1952 BUY LOW, BUY LOWER
来源:互联网 发布:access sql update 编辑:程序博客网 时间:2024/05/15 06:08
dp:求一串序列中最长递减子序列包含的数的个数以及有几个长度相同的最长的递减子序列,并不要求连续。#include <iostream>#include <string.h>#include <cstdio>using namespace std;const int size = 5100;int maxlen[size];int maxnum[size];int main(){ int a[size]; int n; while (scanf("%d", &n) != EOF){ for (int i = 1; i <= n; i ++){ scanf("%d", &a[i]); maxnum[i] = 0; maxlen[i] = 1; } for (int i = 1 ; i <= n; i ++){ for (int j = 1; j < i; j ++){ if (a[i] < a[j]){ maxlen[i] = max(maxlen[i], maxlen[j]+1);//我们只要比较每一个a[i]和它前面的a[j](j<i),如果a[i]>a[j],则到i为止的的最长序列至少比到j多1. } } } for (int i = 1; i <= n; i ++) if (maxlen[i] == 1)maxnum[i] = 1; for (int i = 1; i <= n; i ++){ for (int j = i-1; j > 0; j --){ if (a[j] > a[i]){ if (maxlen[j]+1 == maxlen[i]){ maxnum[i] += maxnum[j]; } } if (a[j] == a[i]){ if (maxlen[i] == 1)maxnum[i] = 0; break; } } } int maxx = -1; for (int i = 1; i <= n; i ++){ if (maxlen[i] > maxx) maxx = maxlen[i]; } int ans = 0; for (int i = 1; i <= n; i ++){ if (maxlen[i] == maxx) ans += maxnum[i] ; } printf("%d %d\n", maxx, ans); } return 0;}
- 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(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 dp
- POJ 1952 BUY LOW, BUY LOWER
- poj 1952buy low, buy lower
- POJ 1952 BUY LOW, BUY LOWER DP
- POJ 1952 Buy Low,Buy Lower
- POJ 1952 BUY LOW, BUY LOWER
- POJ 1952BUY LOW, BUY LOWER
- POJ 1952 BUY LOW, BUY LOWER
- POJ 1952 C++:BUY LOW, BUY LOWER
- 排序算法汇总--冒泡,插入,归并,快速,堆,计数,基数,桶排序
- Android研究院之ListView原理学习与优化总结
- AHCI驱动下载与手动安装图解
- 概率算法求PI
- 微软企业库4.1学习笔记(十七)缓存模块5 缓存的典型用法
- poj 1952 BUY LOW, BUY LOWER
- js div拖拽实现兼容ie/firefox js之鼠标位置深入解析
- 理解矩阵(二)
- 微软企业库4.1学习笔记(十八)缓存模块6 缓存的设计目的
- 1.通过菜单打开某个对话框(开通博客,权当新人学VC的笔记了)
- 【HGE 教程03】简单的游戏声音
- 微软企业库4.1学习笔记(十九)缓存模块7 扩展和修改缓存模块
- 微软企业库4.1学习笔记(二十)缓存模块8 性能计数器
- Codeforces 136 divIID && zoj 3633 && HDU 4358