• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
FightingForWorldFinal
博客园    首页    新随笔    联系   管理    订阅  订阅

HDU1244Max Sum Plus Plus Plus

 

Max Sum Plus Plus Plus

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 1042    Accepted Submission(s): 524

Problem Description
给定一个由n个正整数组成的整数序列
a1 a2 a3 ... an
求按先后次序在其中取m段长度分别为l1、l2、l3...lm的不交叠的连续整数的和的最大值。
 
Input
第一行是一个整数n(0 ≤ n ≤ 1000),n = 0表示输入结束 第二行的第一个数是m(1 ≤ m ≤ 20), 第二行接下来有m个整数l1,l2...lm。 第三行是n个整数a1, a2, a2 ... an.
 
Output
输出m段整数和的最大值。
 
Sample Input
3 2 1 1 1 2 3 4 2 1 2 1 2 3 5 0
 
Sample Output
5 10
 
dp[i][j]表示从j个元素选出i段最大值
 
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <sstream>
#include <map>
#include <bitset>
using namespace std ;
#define zero {0}
#define INF 2000000000
#define eps 1e-6
typedef long long LL;

int main()
{
    #ifdef DeBUG
        freopen("C:\\Users\\Sky\\Desktop\\1.in","r",stdin);
    #endif
    int n;
    while(scanf("%d",&n),n)
    {
        int m;
        int i,j,k;
        int seg[25]=zero;
        int num[1005]=zero;
        int sum[1010]=zero;
        int dp[25][1010]=zero;
        scanf("%d",&m);
        for(i=1;i<=m;i++)
        {
            scanf("%d",&seg[i]);
        }
        for(i=1;i<=n;i++)
        {
            scanf("%d",&num[i]);
            sum[i]=sum[i-1]+num[i];
        }
        int l=0;
        for(i=1;i<=m;i++)
        {
            l+=seg[i];
            for(j=l;j<=n;j++)
            {
                dp[i][j]=max(dp[i][j-1],dp[i-1][j-seg[i]]+sum[j]-sum[j-seg[i]]);
            }
        }
        printf("%d\n",dp[m][n]);
        
    }
    
    return 0;
}
View Code
posted @ 2013-08-26 18:50  Sky-J  阅读(243)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3