#include <iostream>
#include <vector>
using namespace std;
int main()
{
int x, y;
cin >> x >> y;
vector<vector<int> > t(x, vector<int> (y));
for (int i = 0; i < x; ++i){
for (int j = 0; j < y; ++j){
int mark;
cin >> mark;
t[i][j] = mark;
}
for (int i = 1; i < y; ++i){
t[0][i] += t[0][i - 1];
for (int i = 1; i < x; ++i){
t[i][0] += t[i - 1][0];
for (int j = 1; j < y; ++j){
t[i][j] += min(t[i - 1][j], t[i][j - 1]);
cout << t[x - 1][y - 1] << endl;
Объяснение:
Полагаю, это дубликат но без данных о входных/выходных данных. Тогда я продублирую решение на C#.
using System;
using System.Linq;
namespace Samokat
class Program
static void Main(string[] args)
var input = Console.In
.ReadLine()
.Split(',', ' ')
.Where(t => !String.IsNullOrEmpty(t))
.Select(int.Parse)
.ToList();
int flatLen = input[0];
int uphillLen = input[1];
int flatDrain = input[2];
int uphillDrain = input[3];
int fuel = input[4];
// minimizing flat travel
int minFlatLen = flatLen - fuel;
minFlatLen = minFlatLen < 0 ? 0 : minFlatLen;
int maxUphillLen = uphillLen - (fuel - (flatLen - minFlatLen)) / 2;
maxUphillLen = maxUphillLen < 0 ? 0 : maxUphillLen;
// minimizing uphill travel
int minUphillLen = uphillLen - (fuel) / 2;
minUphillLen = minUphillLen < 0 ? 0 : minUphillLen;
int maxFlatLen = flatLen - (fuel - (uphillLen - minUphillLen) * 2);
maxFlatLen = maxFlatLen < 0 ? 0 : maxFlatLen;
int minFlatTravelDrain = minFlatLen * flatDrain + maxUphillLen * uphillDrain;
int maxFlatTravelDrain = maxFlatLen * flatDrain + minUphillLen * uphillDrain;
var minDrain = Math.Min(minFlatTravelDrain, maxFlatTravelDrain);
var maxDrain = Math.Max(minFlatTravelDrain, maxFlatTravelDrain);
Console.Out.WriteLine(minDrain);
Console.Out.WriteLine(maxDrain);
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int x, y;
cin >> x >> y;
vector<vector<int> > t(x, vector<int> (y));
for (int i = 0; i < x; ++i){
for (int j = 0; j < y; ++j){
int mark;
cin >> mark;
t[i][j] = mark;
}
}
for (int i = 1; i < y; ++i){
t[0][i] += t[0][i - 1];
}
for (int i = 1; i < x; ++i){
t[i][0] += t[i - 1][0];
}
for (int i = 1; i < x; ++i){
for (int j = 1; j < y; ++j){
t[i][j] += min(t[i - 1][j], t[i][j - 1]);
}
}
cout << t[x - 1][y - 1] << endl;
}
Объяснение:
Полагаю, это дубликат но без данных о входных/выходных данных. Тогда я продублирую решение на C#.
using System;
using System.Linq;
namespace Samokat
{
class Program
{
static void Main(string[] args)
{
var input = Console.In
.ReadLine()
.Split(',', ' ')
.Where(t => !String.IsNullOrEmpty(t))
.Select(int.Parse)
.ToList();
int flatLen = input[0];
int uphillLen = input[1];
int flatDrain = input[2];
int uphillDrain = input[3];
int fuel = input[4];
// minimizing flat travel
int minFlatLen = flatLen - fuel;
minFlatLen = minFlatLen < 0 ? 0 : minFlatLen;
int maxUphillLen = uphillLen - (fuel - (flatLen - minFlatLen)) / 2;
maxUphillLen = maxUphillLen < 0 ? 0 : maxUphillLen;
// minimizing uphill travel
int minUphillLen = uphillLen - (fuel) / 2;
minUphillLen = minUphillLen < 0 ? 0 : minUphillLen;
int maxFlatLen = flatLen - (fuel - (uphillLen - minUphillLen) * 2);
maxFlatLen = maxFlatLen < 0 ? 0 : maxFlatLen;
int minFlatTravelDrain = minFlatLen * flatDrain + maxUphillLen * uphillDrain;
int maxFlatTravelDrain = maxFlatLen * flatDrain + minUphillLen * uphillDrain;
var minDrain = Math.Min(minFlatTravelDrain, maxFlatTravelDrain);
var maxDrain = Math.Max(minFlatTravelDrain, maxFlatTravelDrain);
Console.Out.WriteLine(minDrain);
Console.Out.WriteLine(maxDrain);
}
}
}