9507 2024. 02. 22 12:47:25 1478 Festés (50 pont) cpp17 Hibás válasz 17/50 453ms 125940 KiB
#include <bits/stdc++.h>  
 
using namespace std;
 
typedef long long ll;
typedef long double ld;
typedef pair<int,int> p32;
typedef pair<ll,ll> p64;
typedef pair<double,double> pdd;
typedef vector<ll> v64;
typedef vector<int> v32;
typedef vector<vector<int> > vv32;
typedef vector<vector<ll> > vv64;
typedef vector<vector<p64> > vvp64;
typedef vector<p64> vp64;
typedef vector<p32> vp32;
double eps = 1e-12;
#define forn(i,e) for(ll i = 0; i < e; i++)
#define forsn(i,s,e) for(ll i = s; i < e; i++)
#define rforn(i,s) for(ll i = s; i >= 0; i--)
#define rforsn(i,s,e) for(ll i = s; i >= e; i--)
#define ln "\n"
#define dbg(x) cout<<#x<<" = "<<x<<ln
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define INF 2e18
#define all(x) (x).begin(), (x).end()
#define sz(x) ((ll)(x).size())
ll MOD = 1e9 + 7;

int N_MAX = 4;
int M_MAX = 1e5;
int n, m;

vector<int> r(N_MAX + 1);
vector<vector<vector<int>>> c(M_MAX + 1, vector<vector<int>>(N_MAX + 1, vector<int>(N_MAX + 1))); 

vector<vector<vector<int>>> dpCol(M_MAX + 1, vector<vector<int>>(N_MAX + 1, vector<int>(N_MAX + 1))); 

int main()
{
	//ifstream cin("in.txt");
	
	cin >> n >> m;
	for(int i = 1; i <= n; i++){
		cin >> r[i];
	}

	for(int j = 1; j <= m; j++){
		for(int u = 1; u <= n; u++){
			for(int d = u; d <= n; d++){
				
				cin >> c[j][u][d];
				
			}
		}
	}


	for(int j = 1; j <= m; j++){
		//cout << j << ": " << '\n';
		for(int d = 1; d <= n; d++){
			for(int u = d; u >= 1; u--){	
				dpCol[j][u][d] = c[j][u][d];
				if(u == d) 
				{
					continue;
				}

				for(int d2 = u; d2 <= d - 1; d2++){
					//cout << "[" << u << ", " << d2 << "] " << "[" << d2 + 1 << ", " << d << "]" << '\n';
					dpCol[j][u][d] = min(dpCol[j][u][d], dpCol[j][u][d2] + dpCol[j][d2 + 1][d]);
				}
			}
		}
	}


	for(int j = 1; j <= m; j++){
		for(int u = 1; u <= n; u++){
			for(int d = n; d >= u; d--){
				if(u - 1 >= 1){
					dpCol[j][u][d] = min(dpCol[j][u][d], dpCol[j][u - 1][d]);
				}
				if(d + 1 <= n){
					dpCol[j][u][d] = min(dpCol[j][u][d], dpCol[j][u][d + 1]);
				}
			}
		}
	}

	/*for(int j = 1; j <= m; j++){
		cout << j << ": " << '\n';
		for(int u = 1; u <= n; u++){
			for(int d = 1; d <= n; d++){
				cout << dpCol[j][u][d] << " ";
			}
			cout << '\n';
		}
		cout << '\n';
	}*/




	int s = 0;

	vector<ll> sum(n + 1);
	vector<int> dpRow(n + 1);

	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= m; j++){
			sum[i] += dpCol[j][s + 1][i];
		}
		if(sum[i] < r[i] + dpRow[i - 1]){
			dpRow[i] = sum[i] + dpRow[s];
		}
		else{
			s = i;
			dpRow[i] = r[i] + dpRow[i - 1];
		}

		//cout << i << " " << s << " " <<  sum[i] << " " << dpRow[i] << '\n';
	}

	cout << dpRow[n];




	
	




}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 17/50
1 Elfogadva 0/0 107ms 123584 KiB
2 Hibás válasz 0/0 104ms 123812 KiB
3 Hibás válasz 0/2 324ms 124152 KiB
4 Hibás válasz 0/2 108ms 123952 KiB
5 Hibás válasz 0/3 109ms 124344 KiB
6 Hibás válasz 0/2 130ms 124368 KiB
7 Elfogadva 2/2 428ms 124592 KiB
8 Hibás válasz 0/2 421ms 124744 KiB
9 Hibás válasz 0/2 407ms 124676 KiB
10 Hibás válasz 0/2 405ms 124844 KiB
11 Hibás válasz 0/2 402ms 124924 KiB
12 Hibás válasz 0/2 379ms 124928 KiB
13 Hibás válasz 0/2 400ms 125084 KiB
14 Elfogadva 2/2 209ms 124940 KiB
15 Elfogadva 3/3 231ms 125064 KiB
16 Elfogadva 3/3 305ms 125276 KiB
17 Elfogadva 2/2 305ms 125492 KiB
18 Elfogadva 3/3 301ms 125620 KiB
19 Elfogadva 2/2 372ms 125704 KiB
20 Hibás válasz 0/2 398ms 125832 KiB
21 Hibás válasz 0/2 418ms 125836 KiB
22 Hibás válasz 0/2 398ms 125940 KiB
23 Hibás válasz 0/2 400ms 125936 KiB
24 Hibás válasz 0/2 411ms 125932 KiB
25 Hibás válasz 0/2 453ms 125932 KiB