今日头条2018校园招聘第一题 ---POJ 2479
2017-12-15 22:15
127 查看
[align=left]第一次参加公司的招聘笔试,虽然只是抱着试试水的心态去参加的,可惜的是第一题就做错了。。。。。[/align]
[align=left]第一题,其实只是一个求最大子段和的变式题,不过笔试的时候也不知道怎么了,就是不知道思路,最后还写了一个错的思路[/align]
[align=left]题目大意:笔试题是求两个不相邻区间的最大子段和, OJ题是不相交区间的最大子段和
[/align]
[align=left]思路:很简单,遍历一遍,记录从前往后每个元素以该元素结尾的最大子段和,从后往前每个元素以该元素结尾的最大字段和,[/align]
[align=left]然后一层遍历枚举每一个断点,求出该断点前的最大子段和和断点后的最大子段和最大值
[/align]
[align=center]
[/align]
[align=center]
[/align]
[align=center]
[/align]
[align=center]
[/align]
[align=center]
[/align]
[align=center]
[/align]
[align=center]
[/align]
[align=center]
[/align]
[align=center]Maximum sum[/align]
Description
Given a set of n integers: A={a1, a2,..., an}, we define a function d(A) as below:
Your task is to calculate d(A).
Input
The input consists of T(<=30) test cases. The number of test cases (T) is given in the first line of the input.
Each test case contains two lines. The first line is an integer n(2<=n<=50000). The second line contains n integers: a1, a2, ..., an. (|ai| <= 10000).There is an empty line after each case.
Output
Print exactly one line for each test case. The line should contain the integer d(A).
Sample Input
Sample Output
Hint
In the sample, we choose {2,2,3,-3,4} and {5}, then we can get the answer.
Huge input,scanf is recommended.
Maximum sum
Description
Given a set of n integers: A={a1, a2,..., an}, we define a function d(A) as below:
Your task is to calculate d(A).
Input
The input consists of T(<=30) test cases. The number of test cases (T) is given in the first line of the input.
Each test case contains two lines. The first line is an integer n(2<=n<=50000). The second line contains n integers: a1, a2, ..., an. (|ai| <= 10000).There is an empty line after each case.
Output
Print exactly one line for each test case. The line should contain the integer d(A).
Sample Input
Sample Output
Hint
In the sample, we choose {2,2,3,-3,4} and {5}, then we can get the answer.
Huge input,scanf is recommended.
[align=left]第一题,其实只是一个求最大子段和的变式题,不过笔试的时候也不知道怎么了,就是不知道思路,最后还写了一个错的思路[/align]
[align=left]题目大意:笔试题是求两个不相邻区间的最大子段和, OJ题是不相交区间的最大子段和
[/align]
[align=left]思路:很简单,遍历一遍,记录从前往后每个元素以该元素结尾的最大子段和,从后往前每个元素以该元素结尾的最大字段和,[/align]
[align=left]然后一层遍历枚举每一个断点,求出该断点前的最大子段和和断点后的最大子段和最大值
[/align]
[align=center]
[/align]
[align=center]
[/align]
[align=center]
[/align]
[align=center]
[/align]
[align=center]
[/align]
[align=center]
[/align]
[align=center]
[/align]
[align=center]
[/align]
[align=center]Maximum sum[/align]
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 41980 | Accepted: 13098 |
Given a set of n integers: A={a1, a2,..., an}, we define a function d(A) as below:
Your task is to calculate d(A).
Input
The input consists of T(<=30) test cases. The number of test cases (T) is given in the first line of the input.
Each test case contains two lines. The first line is an integer n(2<=n<=50000). The second line contains n integers: a1, a2, ..., an. (|ai| <= 10000).There is an empty line after each case.
Output
Print exactly one line for each test case. The line should contain the integer d(A).
Sample Input
1 10 1 -1 2 2 3 -3 4 -4 5 -5
Sample Output
13
Hint
In the sample, we choose {2,2,3,-3,4} and {5}, then we can get the answer.
Huge input,scanf is recommended.
Maximum sum
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 41980 | Accepted: 13098 |
Given a set of n integers: A={a1, a2,..., an}, we define a function d(A) as below:
Your task is to calculate d(A).
Input
The input consists of T(<=30) test cases. The number of test cases (T) is given in the first line of the input.
Each test case contains two lines. The first line is an integer n(2<=n<=50000). The second line contains n integers: a1, a2, ..., an. (|ai| <= 10000).There is an empty line after each case.
Output
Print exactly one line for each test case. The line should contain the integer d(A).
Sample Input
1 10 1 -1 2 2 3 -3 4 -4 5 -5
Sample Output
13
Hint
In the sample, we choose {2,2,3,-3,4} and {5}, then we can get the answer.
Huge input,scanf is recommended.
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<string> #include<vector> #include<stack> #include<bitset> #include<cstdlib> #include<sstream> #include<cctype> #include<cmath> #include<set> #include<list> #include<deque> #include<map> #include<queue> using namespace std; typedef long long ll; const double PI=acos(-1.0); const double eps=1e-6; const int INF=0x3f3f3f3f; const int maxn=1234; int T; int a[50005]; int b1[50005],b2[50005]; int main() { int t; scanf("%d",&t); while(t--){ int n; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&a[i]); int sum=0; int maxs=a[0]; for(int i=0;i<n;i++)、、从前往后的最大子段和 { sum+=a[i]; if(sum>maxs) maxs=sum; if(sum<0) sum=0; b1[i]=maxs; } sum=0; maxs=a[n-1]; for(int i=n-1;i>=0;i--){//从后往前的最大子段和 sum+=a[i]; if(sum>maxs) maxs=sum; if(sum<0) sum=0; b2[i]=maxs; } int ans=b1[0]+b2[1]; for(int i=0;i<n-1;i++) { ans=max(ans,b1[i]+b2[i+1]); } printf("%d\n",ans); } return 0; }
相关文章推荐
- POJ 2479 Maximum sum (同POJ 2593 Max Sequence)
- poj 2479 (DP_优化)
- 状态压缩dp入门 第一题 POJ 3254 Corn Fields
- POJ 2479 Maximum sum(2次最大字段和)
- POJ 2479 Maximum sum 动态规划 解题报告
- POJ 2479 最大数字连续和 动态规划
- POJ 3278 Catch That Cow BFS(第一题)
- poj-2479 简单DP
- POJ 2479 Maximum sum 解题报告
- poj 2479 最大子序列和变形
- POJ 2479 动态规划
- POJ 2479 (动态规划)
- poj 2479 Maximun Sum
- poj 2479 max sum
- POJ 2479 Maximum Sum (DP)
- poj 2593 与 poj 2479
- poj 2479 Maximum sum
- POJ 2479 Maximum sum DP
- POJ 2479的简单想法
- POJ 2479 Maximum sum (动态规划)