P1108 低價購買

来源:http://www.cnblogs.com/zwfymqz/archive/2017/05/14/6853212.html
-Advertisement-
Play Games

題目描述 “低價購買”這條建議是在奶牛股票市場取得成功的一半規則。要想被認為是偉大的投資者,你必須遵循以下的問題建議:“低價購買;再低價購買”。每次你購買一支股票,你必須用低於你上次購買它的價格購買它。買的次數越多越好!你的目標是在遵循以上建議的前提下,求你最多能購買股票的次數。你將被給出一段時間內 ...


題目描述

“低價購買”這條建議是在奶牛股票市場取得成功的一半規則。要想被認為是偉大的投資者,你必須遵循以下的問題建議:“低價購買;再低價購買”。每次你購買一支股票,你必須用低於你上次購買它的價格購買它。買的次數越多越好!你的目標是在遵循以上建議的前提下,求你最多能購買股票的次數。你將被給出一段時間內一支股票每天的出售價(2^16範圍內的正整數),你可以選擇在哪些天購買這支股票。每次購買都必須遵循“低價購買;再低價購買”的原則。寫一個程式計算最大購買次數。

這裡是某支股票的價格清單:

日期 1 2 3 4 5 6 7 8 9 10 11 12

價格 68 69 54 64 68 64 70 67 78 62 98 87

最優秀的投資者可以購買最多4次股票,可行方案中的一種是:

日期 2 5 6 10

價格 69 68 64 62

輸入輸出格式

輸入格式:

第1行: N (1 <= N <= 5000),股票發行天數

第2行: N個數,是每天的股票價格。

輸出格式:

輸出文件僅一行包含兩個數:最大購買次數和擁有最大購買次數的方案數(<=2^31)當二種方案“看起來一樣”時(就是說它們構成的價格隊列一樣的時候),這2種方案被認為是相同的。

輸入輸出樣例

輸入樣例#1:
BUYLOW.IN
12
68 69 54 64 68 64 70 67 78 62 98 87
輸出樣例#1:
BUYLOW.OUT
4 2

先探索一下樣例,最大購買次數為4次,共有2中方案,分別是69 68 64 62、69 68 67 62。

我們發現,這道題實際上是在一個數列中選出一個序列,使得這個序列是下降序列(即序列中的任意一個數必須大於它後面的任何一個數),且要使這個序列的長度最長。但是這道題要輸出總的方案數,這就需要對原有的求解過程做一些變動。求方案總數最主要的是要剔除重覆方案。當第2行N個數其中有兩個以上價格相同時,可能就會產生重覆方案。產生重覆方案時,顯然後麵價格的要比前面的更優,因為以後面的價格結尾的最長下降序列的總數肯定不會比前一個少,而且其方案必定囊括了前面這個價格的所有方案。因此,在解題過程中,我們就可以只考慮相同價格中後面的那個。推廣開來,如果當前狀態之前存在重覆的狀態,我們只要考慮離當前狀態位置最近的那一個即可。

設f[i]表示到第i天,能夠買的最大次數,顯然有:f[1]=1;f[i]=max{f[j]+1}(1<=j<=i-1,且ok[j]=1),ok[j]=1表示相同價格時,該位置更優。



 1 #include<stdio.h>
 2 #include<string.h>
 3 bool ok[50010];
 4 int a[5010],b[5010],f[5010];
 5 int n,i,j,k,max,num;
 6 int main()
 7 {
 8     scanf("%d",&n);
 9     for(i=1;i<=n;i++)
10         scanf("%d",&a[i]);
11     b[1]=1;
12     f[1]=1;
13     for(i=2;i<=n+1;i++)
14     {
15         max=0;
16         f[i]=1;
17         for(j=i-1;j>=1;j--)
18             if(a[i]<a[j])
19                 if(b[j]>max)//b[j]表示以第j天結尾的最大購買次數 
20                 {
21                     max=b[j];
22                     memset(ok,1,sizeof(ok));
23                     ok[a[j]]=0;
24                     f[i]=f[j];
25                 }
26                 else
27                     if(b[j]==max && ok[a[j]])
28                     {
29                         ok[a[j]]=0;
30                         f[i]+=f[j];
31                     }
32         b[i]=max+1;
33     }
34     printf("%d %d",b[n+1]-1,f[n+1]);
35 }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 輸入一句英文句子,只有英文字(a-z, A-Z)、每個字之間僅以一個空格分格,前後沒有空格。 返回的是把每一個字的字母順序倒轉寫,但字的順序和字母的大小寫位置則保持不変 ...
  • 題目描述 一共有n(n≤20000)個人(以1--n編號)向佳佳要照片,而佳佳只能把照片給其中的k個人。佳佳按照與他們的關係好壞的程度給每個人賦予了一個初始權值W[i]。然後將初始權值從大到小進行排序,每人就有了一個序號D[i](取值同樣是1--n)。按照這個序號對10取模的值將這些人分為10類。也 ...
  • 正則表達式(regular expression)用於指定字元串的模式,可以在任何需要定位匹配某種特定模式的字元串的情況下使用正則表達式,正則表達式的語法如下: 語法解釋字元c表示字元 c\unnnn,\xnn,\0n,\0nn,\0nnn具有給定十六進位或者十進位值的碼元\t,\n,\r,\f,\... ...
  • 在Java中Swing是線程不安全的,是單線程的設計,這樣的造成結果就是:只能從事件派發線程訪問將要在屏幕上繪製的Swing組件。事件派發線程是調用paint和update等回調方法的線程,它還是事件監聽器介面中定義的事件處理方法,例如,ActionListener中的actionPerformed ...
  • 步驟: 1.現在我們一般使用的編譯環境是java SE 1.8,不支持odbc的連接方式,所以可以用jdbc的連接方式,還要在網上下載一個jdbc的驅動包。(這裡用了Access_JDBC30.jar包,在網上可以找到) 2.右擊JRE System Libary->點擊 Build Path->點 ...
  • 在servlet中定義了多種類型的監聽器,他們用於監聽事件源分別是servletContext,httpsession,servletrequest 這三個域對象。 servlet中監聽器主要有三類: 1,監聽三個域對象的創建和銷毀的監聽器(3個 ), servletContextListenlis ...
  • 下載對應tomcat8版本到本地後,在eclipse中添加tomcat8的對應目錄,輸入http://localhost:8080時無法顯示tomcat的index.jsp頁面(會顯示404頁面)。原因:Eclipse發佈路徑重定向了,沒有放到Tomcat下的webapp中。 解決方法:在Eclip ...
  • ConcurrentHashMap實現原理 ConcurrentHashMap源碼分析 總結 ConcurrentHashMap是Java併發包中提供的一個線程安全且高效的HashMap實現(若對HashMap的實現原理還不甚瞭解,可參考我的另一篇文章HashMap實現原理及源碼分析),Concur ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...