多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > POJ 1552 BUY LOW, BUY LOWER(最長單調遞減子序列求方案數)

POJ 1552 BUY LOW, BUY LOWER(最長單調遞減子序列求方案數)

來源:程序員人生   發布時間:2015-08-13 08:40:21 閱讀次數:2875次
BUY LOW, BUY LOWER
Time Limit: 1000MS   Memory Limit: 30000K
     

Description

The advice to "buy low" is half the formula to success in the bovine stock market.To be considered a great investor you must also follow this problems' advice: 
                    "Buy low; buy lower"

Each time you buy a stock, you must purchase it at a lower price than the previous time you bought it. The more times you buy at a lower price than before, the better! Your goal is to see how many times you can continue purchasing at ever lower prices. 

You will be given the daily selling prices of a stock (positive 16-bit integers) over a period of time. You can choose to buy stock on any of the days. Each time you choose to buy, the price must be strictly lower than the previous time you bought stock. Write a program which identifies which days you should buy stock in order to maximize the number of times you buy. 

Here is a list of stock prices: 
 Day   1  2  3  4  5  6  7  8  9 10 11 12

Price 68 69 54 64 68 64 70 67 78 62 98 87


The best investor (by this problem, anyway) can buy at most four times if each purchase is lower then the previous purchase. One four day sequence (there might be others) of acceptable buys is: 
Day    2  5  6 10

Price 69 68 64 62

Input

* Line 1: N (1 <= N <= 5000), the number of days for which stock prices are given 

* Lines 2..etc: A series of N space-separated integers, ten per line except the final line which might have fewer integers. 

Output

Two integers on a single line: 
* The length of the longest sequence of decreasing prices 
* The number of sequences that have this length (guaranteed to fit in 31 bits) 

In counting the number of solutions, two potential solutions are considered the same (and would only count as one solution) if they repeat the same string of decreasing prices, that is, if they "look the same" when the successive prices are compared. Thus, two different sequence of "buy" days could produce the same string of decreasing prices and be counted as only a single solution. 

Sample Input

12 68 69 54 64 68 64 70 67 78 62 98 87

Sample Output

4 2


題意:給出n個數,求最長單調遞減子序列的長度L,并求出有多少個序列的長度為L。

注意:5 3 1, 5 3 1算1種方案。

分析:由于n不超過5000,所以O(n^2)復雜度可以接受。那末我們就能夠依照平時求最長單調遞減子序列的方法,在求的時候加上1個輔助數組cnt[i]記錄從開始到第i個位置,單調遞減子序列為dp[i]時的方案數。

#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N = 1e4 + 10; int a[N], dp[N], cnt[N]; int main() { int n; while(~scanf("%d", &n)) { for(int i = 0; i < n; i++) { scanf("%d", &a[i]); dp[i] = 1; cnt[i] = 1; } for(int i = 1; i < n; i++) { for(int j = i - 1; j >= 0; j--) { if(a[i] < a[j]) { if(dp[i] < dp[j] + 1) { // 第1次找到能使長度變長的元素 dp[i] = dp[j] + 1; cnt[i] = cnt[j]; } else if(dp[i] == dp[j] + 1) // 之前已找到了1個使得dp[i] = dp[j] +1的元素,現在又找到1個 cnt[i] += cnt[j]; } else { if(a[i] == a[j]) { if(dp[i] == 1) //用第i個位置上的數字替換第j個位置上的數字,構成的序列完全相同 cnt[i] = 0; break; } } } } int max_len = 0, ans_cnt = 0; for(int i = 0; i < n; i++) max_len = max(max_len, dp[i]); for(int i = 0; i < n; i++) if(dp[i] == max_len) ans_cnt += cnt[i]; printf("%d %d ", max_len, ans_cnt); } return 0; }



生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: ww在线观视频免费观看 | 午夜欧美精品久久久久久久 | 亚洲精品色综合久久久 | 久久99精品久久久久久国产越南 | 最近中文字幕mv手机免费高清 | 日本最新免费网站 | 荷兰videos| aa黄色片 | 亚洲 欧美 日韩中文字幕一区二区 | 亚洲嫩草影院在线观看 | 免费网站在线播放 | 日韩精品一区二区三区高清 | 久久综合九色综合欧洲色 | 男女激情网 | 美国一级特黄aa大片 | 亚洲综合春色另类久久 | 高清视频一区二区三区 | 日本人护士免费xxxx视频 | 91欧美精品综合在线观看 | 国产免费福利片 | 伊人网在线视频观看 | 四虎东方va私人影库在线观看 | 亚洲日本在线免费观看 | 免费看的成人yellow视频 | 狠狠色综合一区二区 | 欧美高清 hd video | 成人淫片免费视频95视频 | 亚洲免费午夜视频 | 中国明星freesexhd图片 | 在线免费观看国产视频 | xxxxx性欧美hd另类 | 亚洲视频大全 | 国产香蕉一区二区精品视频 | 国产综合久久 | 国产欧美第一页 | 尤物在线视频 | 中文字幕人成乱码在线观看 | 国产综合久久久久 | 欧美一区二区三区在线可观看 | 浴室边摸边脱边吃奶边做视频 | 久久精品蜜芽亚洲国产a |