HDU 5280 BestCoder Round #47 1001:Senior's Array

Senior‘s Array

Accepts: 199

Submissions: 944

Time Limit: 2000/1000 MS (Java/Others)

Memory Limit: 65536/65536 K (Java/Others)

问题描述

某天学姐姐得到了一个数组A,在这个数组的所有非空区间中,她找出了一个区间和最大的,并把这个区间和定义为这个数组的美丽值。

但是她觉得这个数组不够美,于是决定修理一下这个数组。

学姐姐将会进行一次操作,把原数组中的某个数修改为P(必须修改)。

最后她想使得修改后的数组尽可能美丽。请你帮助她计算经过修理后,这个数组的美丽值最大能是多少?

输入描述

第一行包含一个整数T,表示测试数据组数。

对于每组测试数据:

第一行包含两个整数n,P,表示数组长度以及修改后的值。

接下来一行包含n个整数A[i],表示初始的数组。

1≤n≤1000, ?109≤A[i],P≤109。

输出描述

对于每组测试数据输出一个整数表示对应的答案。

输入样例

2
3 5
1 -1 2
3 -2
1 -1 2

输出样例

8
2

一个一个替换,看哪一次得到的最多。这道题比的时候被hack了,不开心啊啊啊啊。自己还是需要很大的努力。

还有要记住啊,这个是要一个一个替换,肯定是一个一个替换,没有大小条件啊,因为是序列啊啊啊。

代码:

#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;

int value[1005];
long long left_v[1005];

long long max(long long a,int b)
{
	return a>b?a:b;
}

int main()
{
	int Test,num,tihuan,i,j,temp;
	long long ans;
	scanf("%d",&Test);

	while(Test--)
	{
		ans=-1e18;
		memset(left_v,0,sizeof(left_v));

		scanf("%d%d",&num,&tihuan);

		for(i=1;i<=num;i++)
		{
			scanf("%d",&value[i]);
		}

		for(j=1;j<=num;j++)
		{
			temp=value[j];
			value[j]=tihuan;

			left_v[1]=value[1];

			if(left_v[1]>ans)
				ans=left_v[1];

			for(i=2;i<=num;i++)
			{
				left_v[i]=max(left_v[i-1]+value[i],value[i]);
				if(left_v[i]>ans)
					ans=left_v[i];
			}
			value[j]=temp;
		}
		cout<<ans<<endl;
	}
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

HDU 5280 BestCoder Round #47 1001:Senior's Array

时间: 2024-08-07 00:18:28

HDU 5280 BestCoder Round #47 1001:Senior's Array的相关文章

HDU 5281 BestCoder Round #47 1002:Senior&#39;s Gun

Senior's Gun Accepts: 235 Submissions: 977 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) 问题描述 学姐姐是一个酷酷的枪手. 她常常会随身携带n把枪,每把枪有一个攻击力a[i]. 有一天她遇到了m只怪兽,每只怪兽有一个防御力b[j].现在她决定用手中的枪消灭这些怪兽. 学姐姐可以用第i把枪消灭第j只怪兽当且仅当b[j]≤a[i],同时她会获

STL之二分查找:hdu 5178 ( BestCoder Round #31 1001 )

STL包含四种不同的二分查找算法,binary_search    lower_bound  upper_bound   equal_range.他们的作用域是已经排序好的的数组. ★binary_search试图在已排序的[first, last)中寻找元素value.如果找到它会返回true,否则返回false,它不返回查找位置. ★iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素. ★iterat

hdu 4857/BestCoder Round#1 1001(拓扑排序+逆向建图)

此题需细致分析题目,否则题意easy理解错误.应注意以下这样的情况 本题意思尽可能让最小的排的靠前.然后次小的尽量靠前.依次下去 如 input: 1 3 1 3 1 output: 3 1 2 解析:我们应让1尽可能的排在前面.然后尽可能的让2排的靠前.. .所以 2 3 1的结果是错误的 思路:拓扑排序(逆向建图+队列)//为解决上述列子.假设我们正向建图.每次选择入度为零最小的编号输出则无法满足上述案例. 假设我们尝试逆向建图,每次选择入度为零的最大编号输出则刚刚是正确结果的逆序(省赛并查

hdu 4857/BestCoder Round#1 1001(逆向建图)

此题需仔细分析题目,否则题意容易理解错误,应注意下面这种情况 本题意思尽可能让最小的排的靠前,然后次小的尽量靠前,依次下去 如 input: 1 3 1 3 1 output: 3 1 2 解析:我们应让1尽可能的排在前面,然后尽可能的让2排的靠前...所以 2 3 1的结果是错误的 思路:拓扑排序(逆向建图+队列)//为解决上述列子,如果我们正向建图,每次选择入度为零最小的编号输出则无法满足上述案例: 如果我们尝试逆向建图,每次选择入度为零的最大编号输出则刚刚是正确结果的逆序(省赛并查集的逆用

BestCoder Round #47 ($)

1001:Senior's Array 题目大意: 在数组中改一个合适的数(必须修改)使得区间和最大的那个区间的和尽量大,问最大区间和是多大? 解题思路: 数据范围比较小,水题,可以暴力,枚举修改的数字,然后求区间和最大的,最后比较得出最大. 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <algorithm> 5 using namespace std;

BestCoder Round #1 1001 &amp;&amp; 1002 hdu 4857 4858

hdu 4857 逃生 第一题是拓扑排序,不是按照字典序最小输出,而是要使较小的数排在最前面..赛后弄了好久,才比较明白,我一直以为 反向建图,i从1到n,开始深搜dfs( i ),对i点的边,由小到大继续搜一下,同时标记搜过的数,搜过之后就不再搜,搜到底之后ans[cnt++] = u;这样顺序输出就是答案,后来经过超哥指点,才明白深搜贪心是错的.只有 反向建图,用优先队列把较大的数尽量排在前面,然后反序输出才是正解.. 1 #include<iostream> 2 #include<

HDU BestCoder Round #1 1001 逃生 【拓扑排序】

逃生 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 0    Accepted Submission(s): 0 Problem Description 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄,大家只能排成一行. 现在有n个人,从1标号到n.同时有一些奇怪的约束条件,每个都形如:a必须在b之前. 同时,社会是不平等的

BestCoder Round #3 1001 &amp;&amp; HDU 4907 Task schedule (预处理)

题目链接:HDU 4907 Task schedule 中文题. 思路:将工作表存在vis的组数中.预处理一遍.具体看代码 AC代码: #include<stdio.h> #include<string.h> bool vis[200100]; int tak[200100]; int main() { int j,i,ti; int n,m,t,num; while(scanf("%d",&t)!=EOF) { while(t--) { memset(

BestCoder Round #2 1001 TIANKENG’s restaurant

不得不说,bastcoder是个hack游戏啊!!! 题意:求最少要多少张椅子才能让所有来的客人有地方坐!! 就是一个区间的处理吧!!!和HDU  1556 我待水似流年,流年待我似水神似!!!! 求的是重叠的区间最大,我们只要标记每个区间会有多少人就可以了!!! 然后在从0到1440分统计就OK了!! AC代码如下: #include<iostream> #include<cstdio> #include<cmath> #include<map> #inc