A、Senior's Array-------(BestCoder Round #47)
2015-08-30 14:53
316 查看
Senior's Array
Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/65536 K (Java/Others)
问题描述
某天学姐姐得到了一个数组AA,在这个数组的所有非空区间中,她找出了一个区间和最大的,并把这个区间和定义为这个数组的美丽值。 但是她觉得这个数组不够美,于是决定修理一下这个数组。 学姐姐将会进行一次操作,把原数组中的某个数修改为PP(必须修改)。 最后她想使得修改后的数组尽可能美丽。请你帮助她计算经过修理后,这个数组的美丽值最大能是多少?
输入描述
第一行包含一个整数TT,表示测试数据组数。 对于每组测试数据: 第一行包含两个整数$n,P$,表示数组长度以及修改后的值。 接下来一行包含nn个整数A[i]A[i],表示初始的数组。 1\leq n\leq 10001≤n≤1000, -10^9\leq A[i], P\leq 10^9−109≤A[i],P≤109。
输出描述
对于每组测试数据输出一个整数表示对应的答案。
输入样例
2 3 5 1 -1 2 3 -2 1 -1 2
输出样例
8 2
分析:给一个数组,寻找一个区间,并且必须修改其中一个数为P,使得这个区间和最大。
思路:n最大1000,果断暴力计算:修改每一个数组值,修改一次,然后计算一次区间和。
PS:哎!没注意到数据超过了int,果断被hack了。
注意一下:1<<60并不能得到long long类型的数值,必须把1强制转换成long long类型。
CODE:
#include <iostream> #include <string.h> #include <cmath> #include <algorithm> #define ll long long using namespace std; ll minn=-((ll)1<<60); ll n,P,arr[1005]; ll dp[1005]; ll ans; ll cal() { ll maxn=arr[0]; dp[0]=arr[0]; for(int i=1;i<n;i++){ dp[i]=max(arr[i],dp[i-1]+arr[i]); if(maxn<dp[i]) maxn=dp[i]; } return maxn; } int main() { // cout<<minn<<endl; // fill(dp,dp+1000,minn); // cout<<dp[123]<<endl; int t; cin>>t; while(t--){ cin>>n>>P; ans=minn; for(int i=0;i<n;i++) cin>>arr[i]; for(int i=0;i<n;i++){ fill(dp,dp+n,minn); ll tmp=arr[i]; arr[i]=P; ll ret=cal(); if(ret>ans) ans=ret; arr[i]=tmp; } cout<<ans<<endl; } }
相关文章推荐
- 华为面试:字符逆序
- 关于Java--i++/++i问题
- 电信F412
- ubuntu 14.04 如何降低温度和风扇转速
- CentOS yum upgrade, Error Loaded plugins: fastestmirror
- OSPF链路简单密码认证
- PHP判断字符是否为字母/数字检测/password_hash密码加密
- rust:打印变量地址
- Python入门
- MFC Radio Button 使用 分组 RadioButton 用法
- MongoDB (八) MongoDB 文档操作
- C#对字符串加密解密
- 20个响应式网页设计中的“神话”误区
- 计算器
- 使用字符生成器的reverse功能的会问字符串的检测
- The Java EE 6 Tutorial Maintaining Client State
- Windows Azure Compute Emulator无法启动问题解决方案
- 二进制
- 野人学Android基础篇之初探UI控件第六课--ListView和他的adapter们(二)
- Esxi 5.1 添加存储设备的问题