George and Job
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
The new ITone 6 has been released recently and George got really keen to buy it. Unfortunately, he didn't have enough money, so George was going to work as a programmer. Now he faced the following problem at the work.
Given a sequence of n integers p1, p2, ..., pn. You are to choose k pairs of integers:
in such a way that the value of sum is maximal possible. Help George to cope with the task.
Input
The first line contains three integers n, m and k (1 ≤ (m × k) ≤ n ≤ 5000). The second line contains n integers p1, p2, ..., pn (0 ≤ pi ≤ 109).
Output
Print an integer in a single line — the maximum possible value of sum.
Sample test(s)
input
5 2 1 1 2 3 4 5
output
9
input
7 1 3 2 10 7 18 5 33 0
output
61
#include <cstdlib> #include <cctype> #include <cstring> #include <cstdio> #include <cmath> #include <algorithm> #include <vector> #include <string> #include <iostream> #include <map> #include <set> #include <queue> #include <stack> #include <bitset> using namespace std; #define PB push_back #define MP make_pair #define REP(i,n) for(int i=0;i<(n);++i) #define FOR(i,l,h) for(int i=(l);i<=(h);++i) #define DWN(i,h,l) for(int i=(h);i>=(l);--i) #define CLR(vis,pos) memset(vis,pos,sizeof(vis)) #define PI acos(-1.0) #define INF 0x3f3f3f3f #define LINF 1000000000000000000LL #define eps 1e-8 typedef long long ll; int n,m,k; ll a[5678]; ll dp[5678][5678]; ll s[5678]; int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); cin>>n>>m>>k; CLR(dp,0),CLR(a,0),CLR(s,0); FOR(i,1,n){ cin>>a[i]; s[i]=s[i-1]+a[i]; } FOR(i,m,n){ FOR(j,1,k){ dp[i][j]=max(dp[i-m][j-1]+s[i]-s[i-m],dp[i-1][j]); printf("dp[%d][%d]=%I64d\n",i,j,dp[i][j]); } } cout<<dp[n][k]<<endl; return 0; }