zoukankan      html  css  js  c++  java
  • 动态规划 P1121 环状最大两段子段和

    P1121 环状最大两段子段和

    题目描述

    给出一段环状序列,即认为A[1]和A[N]是相邻的,选出其中连续不重叠且非空的两段使得这两段和最大。

    输入输出格式

    输入格式:

    输入文件maxsum2.in的第一行是一个正整数N,表示了序列的长度。

    第2行包含N个绝对值不大于10000的整数A[i],描述了这段序列,第一个数和第N个数是相邻的。

    输出格式:

    输入文件maxsum2.out仅包括1个整数,为最大的两段子段和是多少。

    输入输出样例

    输入样例#1:
    7
    2 -4 3 -1 2 -4 3
    
    输出样例#1:
    9

    说明

    【样例说明】

    一段为3

    前缀和、后缀和的应用

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<cstring>
     5 #include<algorithm>
     6 using namespace std;
     7 struct data{
     8     int w,h;
     9 }book[120];
    10 bool cmp(const data&a,const data&b){
    11     return a.h<b.h;
    12 }
    13 int f[120][120];
    14 int n,k,ans;
    15 int main(){
    16     scanf("%d%d",&n,&k);
    17     for(int i=1;i<=n;i++) scanf("%d%d",&book[i].h,&book[i].w);
    18     k=n-k;
    19     sort(book+1,book+n+1,cmp);
    20     for(int i=1;i<=n;i++)
    21         for(int j=2;j<=min(i,k);j++){
    22             f[i][j]=0x3f3f3f3f;
    23             for(int p=j-1;p<i;p++) f[i][j]=min(f[i][j],f[p][j-1]+abs(book[i].w-book[p].w));
    24         }
    25     ans=0x3f3f3f3f;
    26     for(int i=k;i<=n;i++) ans=min(ans,f[i][k]);
    27     printf("%d",ans);
    28     return 0;
    29 }
  • 相关阅读:
    关于上网内容
    lua 学习笔记1
    庖丁解牛Linux基本系统组成分析
    使用163.com的Centos6 yum源,更新RHEL6系统
    安装FreeBSD 8.2
    虚拟机安装FreeBSD 8.2
    也谈苹果
    2011年国庆老家记录
    Common lisp 学习笔记
    JDBC | 第八章: JDBC常用数据库连接池c3p0,dbcp,durid,hikariCP,tomcatjdbc性能及区别
  • 原文地址:https://www.cnblogs.com/zwube/p/6926408.html
Copyright © 2011-2022 走看看