import java.util.Scanner;
/** * 股票买卖,int K为最大交易次数,int[] prices为股票价格,prices[i-1]表示第i天的股票价格 * 求收益最大化时的收益 * */
public class DP7 {
public static void main(String[] args) {
//int k = 3;
//int[] prices = {1,3,4,1,9,5,11,99};
Scanner sc = new Scanner(System.in);
String s1 = sc.nextLine();
int k = Integer.valueOf(s1);
String s2 = sc.nextLine();
String[] str = s2.split(" ");
int[] prices = new int[str.length];
for (int i = 0; i < str.length ; i++) {
prices[i]=Integer.valueOf(str[i]);
}
DP7 dp7 = new DP7();
int res = dp7.dp(k, prices);
System.out.println(res);
}
int dp(int K,int[] prices){
int N = prices.length;
int[][][] dp = new int[N+1][K+1][2];
//base case
for (int i = 0; i <K+1 ; i++) {
//还没开始,利润为0
dp[0][i][0]=0;
//还没开始,不可能持有股票,用负无穷表示不可能
dp[0][i][1]=(int)Float.NEGATIVE_INFINITY;
}
for (int i = 0; i <N+1 ; i++) {
//k为0表示不允许交易,利润为0
dp[i][0][0]=0;
//k为0表示不允许交易,不允许交易的情况下是不可能持有股票的,用负无穷表示不可能
dp[i][0][1]=(int)Float.NEGATIVE_INFINITY;
}
for (int i = 1; i <N+1 ; i++) {
for (int j = 1; j <K+1 ; j++) {
//当前未持有股票,有两种可能
//昨天就没有持有,今天选择观望,收益为到昨天的收益dp[i-1][j][0]
//昨天持有股票,今天卖了,收益为到昨天持有股票的收益加今天卖出去的收益dp[i-1][j][1]+prices[i-1]
//两者取较大的收益作为今天的收益
dp[i][j][0]=Math.max(dp[i-1][j][0],dp[i-1][j][1]+prices[i-1]);
//当前持有股票,有两种可能
//昨天就持有,今天选择观望,收益为到昨天的收益dp[i-1][j][1]
//昨天没有持有股票,今天买了,收益为到昨天的收益减去今天买到的股票价格dp[i-1][j][0]-prices[i-1]
//两者取较大的收益作为今天的收益
dp[i][j][1]=Math.max(dp[i-1][j][1],dp[i-1][j-1][0]-prices[i-1]);
}
}
return dp[N][K][0];
}
}