HDU1003 最大子段和 线性dp
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1003
Max Sum
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 282195 Accepted Submission(s): 67034
14 1 4
7 1 6
#include<stdio.h>
#include<iostream>
#include<math.h>
#include<string.h>
#include<set>
#include<map>
#include<list>
#include<algorithm>
using namespace std;
typedef long long LL;
int mon1[]= {,,,,,,,,,,,,};
int mon2[]= {,,,,,,,,,,,,};
int dir[][]={{,},{,-},{,},{-,}};
#define max_v 100005
int a[max_v];
int dp[max_v];
int main()
{
int t;
cin>>t;
int c=;
while(c<=t)
{
int n;
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
memset(dp,,sizeof(dp));
//dp[i] 以第i个数结尾的序列的最大字段和
dp[]=a[];
for(int i=;i<=n;i++)
{
if(dp[i-]<)
dp[i]=a[i];
else
dp[i]=dp[i-]+a[i];
}
int index1=,index2=; //找尾 最大dp[i]对应的i就是尾
int temp=dp[];
for(int i=;i<=n;i++)
{
if(temp<dp[i])
{
temp=dp[i];
index2=i;
}
} //找头 从尾往前面加,加到和为0就是头
for(int i=index2,x=;x!=temp;i--)
{
x+=a[i];
index1=i;
}
int sum=;
for(int i=index2-;i>=;i--)
{
sum+=a[i];
if(sum==)
index1=i;
} printf("Case %d:\n",c);
printf("%d %d %d\n",temp,index1,index2);
if(c<t)
printf("\n");
c++;
}
return ;
}
另外一种找头的方法:
#include<stdio.h>
#include<iostream>
#include<math.h>
#include<string.h>
#include<set>
#include<map>
#include<list>
#include<algorithm>
using namespace std;
typedef long long LL;
int mon1[]= {,,,,,,,,,,,,};
int mon2[]= {,,,,,,,,,,,,};
int dir[][]={{,},{,-},{,},{-,}};
#define max_v 100005
int a[max_v];
int dp[max_v];
int main()
{
int t;
cin>>t;
int c=;
while(c<=t)
{
int n;
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
memset(dp,,sizeof(dp));
//dp[i] 以第i个数结尾的序列的最大字段和
dp[]=a[];
for(int i=;i<=n;i++)
{
if(dp[i-]<)
dp[i]=a[i];
else
dp[i]=dp[i-]+a[i];
}
int index1=,index2=; //找尾 最大dp[i]对应的i就是尾
int temp=dp[];
for(int i=;i<=n;i++)
{
if(temp<dp[i])
{
temp=dp[i];
index2=i;
}
} index1=index2;
for(int i=index1;i>=;i--)
{
if(dp[i]>=)
index1=i;
else
break;
} printf("Case %d:\n",c);
printf("%d %d %d\n",temp,index1,index2);
if(c<t)
printf("\n");
c++;
}
return ;
}
HDU1003 最大子段和 线性dp的更多相关文章
- 『最大M子段和 线性DP』
最大M子段和(51nod 1052) Description N个整数组成的序列a[1],a[2],a[3],-,a[n],将这N个数划分为互不相交的M个子段,并且这M个子段的和是最大的.如果M &g ...
- 洛谷P1115 最大子段和 (线性DP)
经典的线性DP例题,用f[i]表示以第i个位置结尾的最大连续子段和. 状态转移方程:f[i]=max(f[i],f[i-1]+a[i]); 这里省去了a数组,直接用f数组读数据,如果f[i-1]< ...
- 线性DP总结(LIS,LCS,LCIS,最长子段和)
做了一段时间的线性dp的题目是时候做一个总结 线性动态规划无非就是在一个数组上搞嘛, 首先看一个最简单的问题: 一,最长字段和 下面为状态转移方程 for(int i=2;i<=n;i++) { ...
- POJ 2479-Maximum sum(线性dp)
Maximum sum Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 33918 Accepted: 10504 Des ...
- poj 1050 To the Max(线性dp)
题目链接:http://poj.org/problem?id=1050 思路分析: 该题目为经典的最大子矩阵和问题,属于线性dp问题:最大子矩阵为最大连续子段和的推广情况,最大连续子段和为一维问题,而 ...
- 动态规划_线性dp
https://www.cnblogs.com/31415926535x/p/10415694.html 线性dp是很基础的一种动态规划,,经典题和他的变种有很多,比如两个串的LCS,LIS,最大子序 ...
- 线性DP 学习笔记
前言:线性DP是DP中最基础的.趁着这次复习认真学一下,打好基础. ------------------ 一·几点建议 1.明确状态的定义 比如:$f[i]$的意义是已经处理了前$i个元素,还是处理第 ...
- LightOJ1044 Palindrome Partitioning(区间DP+线性DP)
问题问的是最少可以把一个字符串分成几段,使每段都是回文串. 一开始想直接区间DP,dp[i][j]表示子串[i,j]的答案,不过字符串长度1000,100W个状态,一个状态从多个状态转移来的,转移的时 ...
- Codeforces 176B (线性DP+字符串)
题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=28214 题目大意:源串有如下变形:每次将串切为两半,位置颠倒形成 ...
随机推荐
- Fastify 系列教程一 (路由和日志)
Fastify 系列教程: Fastify 系列教程一 (路由和日志) Fastify 系列教程二 (中间件.钩子函数和装饰器) Fastify 系列教程三 (验证.序列化和生命周期) Fastify ...
- HTML5和IOS、Android之间的交互
HTML5向IOS.Android传参: html给native传参需要注意三点: 1.判断终端设备,一般我们都是双系统开发,android和ios语言又不一样:我们需要用不同的方法给他们传递参数: ...
- Android Studio cannot resolve symbols
引入了第三方类库,不管怎么编译 clean 都找多到类库 关闭重新打开android studio就好了.....
- logback.xml配置示例
需要的jar如下: <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api< ...
- web assembly是什么,能干什么
web assembly混合javascript和另外底层语言编译的模块,共同运行.将js的高级,易用及c/c++的高效底层优势结合起来. 最可能的用处是提供一种可行的方法将原来的c/c++应用por ...
- Oracle EBS 请求
SELECT t.responsibility_id, t.responsibility_key, t.responsibility_name, t.description, t.menu_id, f ...
- 【MySQL】无法启动mysql服务(位于本地计算机上)错误1067,进程意外中止
好久没看MySQL了,今天启动起来找找感觉,尴尬了...发现服务启动不了.系统提示:无法启动mysql服务(位于本地计算机上)错误1067,进程意外中止. 解决过程: 1.在网上百度好久,看到一条解决 ...
- TITLE: BizTalk Server 2013 Administration Console
TITLE: BizTalk Server 2013 Administration Console------------------------------ Could not store tran ...
- SOAR平台初探(一)
1.前言 Security Orchestration, Automation and Response(SOAR)安全编排和自动化响应,是Gartner2017年提出的新概念.Gartner预计到2 ...
- 【接口】常见接口集合(返回JSON)
转<JSON校验网站…>http://www.bejson.com/go.html?u=http://www.bejson.com/webInterface.html 这里为大家搜集了一些 ...