第一講 基本概念

来源: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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...