1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- class InvestmentOptimizer
- {
- static void Main()
- {
- string inputFilePath = "C:\\Users\\admin\\source\\repos\\InvestmentAllocation\\InvestmentAllocation\\test.txt";
- string outputFilePath = "result.txt";
- // Чтение данных из файла
- var lines = File.ReadAllLines(inputFilePath);
- int numLevels = lines.Length;
- int numEnterprises = lines[0].Split(' ').Length - 1;
- int[,] profits = new int[numLevels, numEnterprises + 1];
- int[] investmentLevels = new int[numLevels];
- for (int i = 0; i < numLevels; i++)
- {
- var values = lines[i].Split(' ').Select(int.Parse).ToArray();
- investmentLevels[i] = values[0];
- for (int j = 0; j < numEnterprises; j++)
- {
- profits[i, j + 1] = values[j + 1];
- }
- }
- int totalInvestment = investmentLevels[numLevels - 1]; // Последнее значение первого столбца
- // Инициализация массива для хранения максимальной прибыли
- int[,] dp = new int[numEnterprises + 1, totalInvestment + 1];
- int[,] investmentTrack = new int[numEnterprises + 1, totalInvestment + 1];
- // Заполнение таблицы динамического программирования
- for (int i = 1; i <= numEnterprises; i++)
- {
- for (int j = 0; j <= totalInvestment; j++)
- {
- for (int k = 0; k < numLevels; k++)
- {
- if (investmentLevels[k] <= j)
- {
- int profit = profits[k, i] + dp[i - 1, j - investmentLevels[k]];
- if (profit > dp[i, j])
- {
- dp[i, j] = profit;
- investmentTrack[i, j] = investmentLevels[k];
- }
- }
- }
- }
- }
- // Восстановление решения
- int remainingInvestment = totalInvestment;
- var allocation = new int[numEnterprises + 1];
- for (int i = numEnterprises; i > 0; i--)
- {
- allocation[i] = investmentTrack[i, remainingInvestment];
- remainingInvestment -= allocation[i];
- }
- int maxProfit = dp[numEnterprises, totalInvestment];
- // Запись результата в файл
- using (var writer = new StreamWriter(outputFilePath))
- {
- writer.WriteLine($"Итак, инвестиции в размере {totalInvestment} необходимо распределить следующим образом:");
- for (int i = 1; i <= numEnterprises; i++)
- {
- writer.WriteLine($"{i}-му предприятию выделить {allocation[i]}");
- }
- writer.WriteLine($"Максимальная прибыль: {maxProfit}");
- }
- }
- }
|