Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace SumProduct
- {
- class Program
- {
- static void Print(int idx, int[,] dp, int b, int c)
- {
- for (int i = b; i <= c; i++)
- {
- Console.Write(dp[idx, i]+" ");
- }
- Console.WriteLine();
- }
- static void Main(string[] args)
- {
- int[] input = Console.ReadLine().Split(' ').
- Select(int.Parse).ToArray();
- int n = input[0];
- int b = input[1];
- int c = input[2];
- int d = input[3];
- int[] a = Console.ReadLine().Split(' ').
- Select(int.Parse).ToArray();
- int[,] dp = new int[2, 10];
- for (int i = b; i <= c; i++)
- {
- dp[0, i] = a[0] * i;
- }
- int max = int.MinValue;
- for (int i = 1; i < n; i++)
- {
- for (int currentMul = b; currentMul <= c; currentMul++)
- {
- if (i % 2 != 0)
- {
- max = int.MinValue;
- for (int prevMul = b; prevMul <= c; prevMul++)
- {
- if (Math.Abs(currentMul - prevMul) <= d
- && dp[0, prevMul] > max)
- max = dp[0, prevMul];
- }
- dp[1, currentMul] = max + a[i] * currentMul;
- }
- else
- {
- max = int.MinValue;
- for (int prevMul = b; prevMul <= c; prevMul++)
- {
- if (Math.Abs(currentMul - prevMul) <= d
- && dp[1, prevMul] > max)
- max = dp[1, prevMul];
- }
- dp[0, currentMul] = max + a[i] * currentMul;
- }
- }
- }
- int ans = int.MinValue;
- if (n % 2 != 0)
- {
- //0
- for (int i = b; i <= c; i++)
- {
- ans = Math.Max(ans, dp[0, i]);
- }
- }
- else {
- //1
- for (int i = b; i <= c; i++)
- {
- ans = Math.Max(ans, dp[1, i]);
- }
- }
- Console.WriteLine(ans);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement