156252025-02-21 11:05:04GervidDinamitcpp17Hibás válasz 45/5025ms1008 KiB
#include <iostream>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <limits.h>
#include <algorithm>
#include <math.h>
#include <array>
#include <fstream>

using namespace std;
using ll = long long;

signed main()
{
	iostream::sync_with_stdio(0);
	cin.tie(0);

	ll n, m, k, i, j, l, l2;
	cin >> n >> m >> k;

	vector<vector<ll>> grid(n, vector<ll>(m));
	vector<vector<vector<ll>>> dp(n, vector<vector<ll>>(m, vector<ll>(k+1, LLONG_MAX)));
	for (i = 0; i < n; i++)
		for (j = 0; j < m; j++)
			cin >> grid[i][j];

	for (i = 0; i <= k; i++) dp[0][0][i] = grid[0][0] / (1LL << min(62LL, i));

	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
		{
			for (l = 0; l <= k; l++)
			{
				for (l2 = 0; l2 <= l; l2++)
				{
					if ((i != 0) && (j == 0 || dp[i - 1][j][l] < dp[i][j - 1][l]))
					{
						if (dp[i][j][l] > grid[i][j] / (1LL << min(62LL, l2)) + dp[i - 1][j][l - l2])
						{
							dp[i][j][l] = grid[i][j] / (1LL << min(62LL, l2)) + dp[i - 1][j][l - l2];
						}
					}
					if ((j != 0) && (i == 0 || dp[i][j - 1][l] <= dp[i - 1][j][l]))
					{
						if (dp[i][j][l] > grid[i][j] / (1LL << min(62LL, l2)) + dp[i][j - 1][l - l2])
						{
							dp[i][j][l] = grid[i][j] / (1LL << min(62LL, l2)) + dp[i][j - 1][l - l2];
						}
					}
				}
			}
		}
	}
	cout << dp[n-1][m-1][k];
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base45/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/025ms820 KiB
3Elfogadva2/21ms316 KiB
4Elfogadva2/21ms316 KiB
5Elfogadva3/31ms316 KiB
6Elfogadva3/31ms316 KiB
7Elfogadva2/224ms820 KiB
8Elfogadva3/325ms820 KiB
9Hibás válasz0/23ms528 KiB
10Elfogadva2/22ms316 KiB
11Elfogadva3/32ms316 KiB
12Hibás válasz0/32ms464 KiB
13Elfogadva2/27ms564 KiB
14Elfogadva3/37ms564 KiB
15Elfogadva2/225ms776 KiB
16Elfogadva3/325ms820 KiB
17Elfogadva2/225ms820 KiB
18Elfogadva3/325ms820 KiB
19Elfogadva2/225ms820 KiB
20Elfogadva3/325ms820 KiB
21Elfogadva2/225ms1008 KiB
22Elfogadva3/325ms820 KiB