第一講 基本概念

来源:http://www.cnblogs.com/VincentValentine/archive/2017/05/06/6819153.html
-Advertisement-
Play Games

01 複雜度1:最大子列和問題 Description: 給定K個整數組成的序列{N​1​​, N2, ..., N​k​​},“連續子列”被定義為{N​i, N​i+1​​, ..., N​j},其中1≤i≤j≤K。“最大子列和”則被定義為所有連續子列元素的和中最大者。例如給定序列{ 2, 11, ...


01-複雜度1:最大子列和問題
Description:

給定K個整數組成的序列{N​1​​, N2, ..., N​k​​},“連續子列”被定義為{N​i, N​i+1​​, ..., N​j},其中1≤i≤j≤K。“最大子列和”則被定義為所有連續子列元素的和中最大者。例如給定序列{-2, 11, -4, 13, -5, -2},其連續子列{11, -4, 13}有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。

本題旨在測試各種不同的演算法在各種數據情況下的表現。各組測試數據特點如下:

數據1:與樣例等價,測試基本正確性;
數據2:102個隨機整數;
數據3:103個隨機整數;
數據4:104個隨機整數;
數據5:105個隨機整數。

Input:

輸入第1行給出正整數K(≤100000);第2行給出K個整數,其間以空格分隔。

Output:

在一行中輸出最大子列和。如果序列中所有整數皆為負數,則輸出0。

SampleInput:

6
-2 11 -4 13 -5 -2

SampleOutput:

20

Codes:
//#define LOCAL

#include <cstdio>

#define M 100010
int A[M];

int maxV(int a, int b, int c) {
    int t = a>b?a:b;
    return t = t>c?t:c;
}

int mSub(int l, int r) {
    if(l == r) return A[l];
    int a, b, c, d, i, u, v, m = (l+r)/2;
    a = b = c = d = 0, u = mSub(l, m), v = mSub(m+1, r);
    for(i=m; i>=l; --i) {
        a += A[i];
        if(a > c) c = a;
    }
    for(i=m+1; i<=r; ++i) {
        b += A[i];
        if(b > d) d = b;
    }
    return maxV(u, v, c+d);
}

int main()
{
    #ifdef LOCAL
        freopen("E:\\Temp\\input.txt", "r", stdin);
        freopen("E:\\Temp\\output.txt", "w", stdout);
    #endif

    int i, n, sum = 0;
    scanf("%d", &n);
    for(i=0; i<n; ++i) {
        scanf("%d", &A[i]);
        if(A[i] < 0) ++sum;
    }

    if(sum == n) printf("0\n");
    else printf("%d\n", mSub(0, n-1));

    return 0;
}
PAT-1007:Maximum Subsequence Sum.
Description:

Given a sequence of K integers { N1, N2, ..., NK }. A continuous subsequence is defined to be { Ni, Ni+1, ..., Nj } where 1 <= i <= j <= K. The Maximum Subsequence is the continuous subsequence which has the largest sum of its elements. For example, given sequence { -2, 11, -4, 13, -5, -2 }, its maximum subsequence is { 11, -4, 13 } with the largest sum being 20.

Now you are supposed to find the largest sum, together with the first and the last numbers of the maximum subsequence.

Input:

Each input file contains one test case. Each case occupies two lines. The first line contains a positive integer K (<= 10000). The second line contains K numbers, separated by a space.

Output:

For each test case, output in one line the largest sum, together with the first and the last numbers of the maximum subsequence. The numbers must be separated by one space, but there must be no extra space at the end of a line. In case that the maximum subsequence is not unique, output the one with the smallest indices i and j (as shown by the sample case). If all the K numbers are negative, then its maximum sum is defined to be 0, and you are supposed to output the first and the last numbers of the whole sequence.

SampleInput:

10
-10 1 2 3 4 -5 -23 3 7 -21

SampleOutput:

10 1 4

Codes:
//#define LOCAL

#include <cstdio>

#define M 10010
int s, p, q, A[M];

void mSub(int n) {
    int a = 0, b = 0, i;
    for(i=0; i<n; ++i) 
        if(A[i] >= 0) { p = q = i; break; }
    for(i=0; i<n; ++i) {
        a += A[i];
        if(a > s) { s = a; q = i; p = b; }
        if(a < 0) { a = 0; b = i+1; }
    }
}

int main()
{
    #ifdef LOCAL
        freopen("E:\\Temp\\input.txt", "r", stdin);
        freopen("E:\\Temp\\output.txt", "w", stdout);
    #endif

    int i, n, f = 1;
    scanf("%d", &n);
    for(i=0; i<n; ++i) {
        scanf("%d", &A[i]);
        if(A[i] >= 0) f = 0;
    }

    mSub(n);
    if(f) { s = 0; p = 0; q = n-1; }
    printf("%d %d %d\n", s, A[p], A[q]);

    return 0;
}

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

-Advertisement-
Play Games
更多相關文章
  • vim [OPTION]... FILE... +/PATTERN:打開文件後,直接讓游標處於第一個被PATTERN匹配到的行的行首vim + file 直接打開file,游標在最後一行 三種主要模式: 命令模式:移動游標,剪切粘貼等 插入模式:編輯,修改文本 擴展模式:保存退出等 模式轉換: a ...
  • 目的:1、學好linux,隨著大數據,雲等應用,開源軟體將占領市場,這些應用都是基於linux的。 2、通過RHCE認證考試 原因:1、人的自律很困難,必須付出代價(交錢上課完成作業)等方式強迫自己學習。(自己也喜歡學習linux) 2、本人年齡偏大40歲,但認為學習不可放鬆,活到老學到老。 正題: ...
  • Linux 中的基本命令與目錄結構 目錄 一、Linux 基本目錄結構 二、基本命令 三、瀏覽目錄 四、中間命令 五、更改密碼 六、環境變數和 shell 變數 七、命令路徑 八、文本編輯器 九、獲取線上幫助 十、shell 輸入輸出 十一、操作進程 十二、更改文件許可權 十三、歸檔和壓縮 一、Lin ...
  • 最近工作碰到一個問題,我和一個同伙負責開發一個管理系統,基於原來的代碼上進行修改,每當他修改之後,我要再修改都要和他確定是不是最新的文件,才能進行修改。非常影響工作的效率,所以在網上找了關於svn的使用。下麵開始svn的安裝和部署,解決開發中代碼的同步問題。 在Linux上安裝很簡單。 第一。先查看 ...
  • 方法1 : 在/etc/rc.local文件中添加 方法 2: 在搜索中找到 startup application 打開界面添加命令即可 ...
  • 原理是將SS轉化成http代理提供命令行終端使用。 1. privoxy安裝 2. privoxy配置 打開配置文件 加入下麵這兩項配置項 第一行設置privoxy監聽任意IP地址的8118埠。第二行設置本地socks5代理客戶端埠,註意不要忘了最後有一個空格和點號。 3. privoxy啟動 ...
  • 前言 在Python官方文檔的標準庫章節中,第一節是簡介,第二節就是Built_in Functions,可見內建函數是Python標準庫的重要組成部分,而有很多內建函數我們平時卻很少用到或根本就不知道原來還有這麼好用的函數居然直接就可以拿來用。 Built_in Funtions 接下來為大家介紹 ...
  • 記憶體映射文件時利用虛擬記憶體實現來將一個文件或者文件的一部分映射到記憶體中,然後整個文件就可以當作數組一樣的訪問,這個比傳統的文件操作要快得多,Java 使用記憶體映射文件首先需要從文件中獲取一個channel(通道),通道時磁碟文件的一個抽象,他使得我們可以訪問諸如記憶體映射、文件加鎖機制以及文件間快速數... ...
一周排行
    -Advertisement-
    Play Games
  • C#TMS系統代碼-基礎頁面BaseCity學習 本人純新手,剛進公司跟領導報道,我說我是java全棧,他問我會不會C#,我說大學學過,他說這個TMS系統就給你來管了。外包已經把代碼給我了,這幾天先把增刪改查的代碼背一下,說不定後面就要趕鴨子上架了 Service頁面 //using => impo ...
  • 委托與事件 委托 委托的定義 委托是C#中的一種類型,用於存儲對方法的引用。它允許將方法作為參數傳遞給其他方法,實現回調、事件處理和動態調用等功能。通俗來講,就是委托包含方法的記憶體地址,方法匹配與委托相同的簽名,因此通過使用正確的參數類型來調用方法。 委托的特性 引用方法:委托允許存儲對方法的引用, ...
  • 前言 這幾天閑來沒事看看ABP vNext的文檔和源碼,關於關於依賴註入(屬性註入)這塊兒產生了興趣。 我們都知道。Volo.ABP 依賴註入容器使用了第三方組件Autofac實現的。有三種註入方式,構造函數註入和方法註入和屬性註入。 ABP的屬性註入原則參考如下: 這時候我就開始疑惑了,因為我知道 ...
  • C#TMS系統代碼-業務頁面ShippingNotice學習 學一個業務頁面,ok,領導開完會就被裁掉了,很突然啊,他收拾東西的時候我還以為他要旅游提前請假了,還在尋思為什麼回家連自己買的幾箱飲料都要叫跑腿帶走,怕被偷嗎?還好我在他開會之前拿了兩瓶芬達 感覺感覺前面的BaseCity差不太多,這邊的 ...
  • 概述:在C#中,通過`Expression`類、`AndAlso`和`OrElse`方法可組合兩個`Expression<Func<T, bool>>`,實現多條件動態查詢。通過創建表達式樹,可輕鬆構建複雜的查詢條件。 在C#中,可以使用AndAlso和OrElse方法組合兩個Expression< ...
  • 閑來無聊在我的Biwen.QuickApi中實現一下極簡的事件匯流排,其實代碼還是蠻簡單的,對於初學者可能有些幫助 就貼出來,有什麼不足的地方也歡迎板磚交流~ 首先定義一個事件約定的空介面 public interface IEvent{} 然後定義事件訂閱者介面 public interface I ...
  • 1. 案例 成某三甲醫預約系統, 該項目在2024年初進行上線測試,在正常運行了兩天後,業務系統報錯:The connection pool has been exhausted, either raise MaxPoolSize (currently 800) or Timeout (curren ...
  • 背景 我們有些工具在 Web 版中已經有了很好的實踐,而在 WPF 中重新開發也是一種費時費力的操作,那麼直接集成則是最省事省力的方法了。 思路解釋 為什麼要使用 WPF?莫問為什麼,老 C# 開發的堅持,另外因為 Windows 上已經裝了 Webview2/edge 整體打包比 electron ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...