Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long int ll;
- #define fastio ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
- #define INF LLONG_MAX
- int main()
- {
- fastio;
- ll test;
- cin >> test;
- for( ll t = 1 ; t <= test ; t++)
- {
- ll n,m,flag=0,flaag = 0,flaaag = 0;
- cin >> n >> m;
- vector<ll> q(n+5);
- vector<pair<ll,ll>> publictp(m+5);
- vector<ll> visitedp(m+5);
- vector<ll> pge(m+5);
- vector<vector<ll>> dp(n+5, vector<ll>(m+5));
- for( ll i = 1 ; i <= n ; i++)
- {
- cin >> q[i];
- }
- for( ll i = 1 ; i <= m ; i++)
- {
- cin >> publictp[i].second;
- }
- for( ll i = 1 ; i <= m ; i++)
- {
- cin >> publictp[i].first;
- }
- sort(publictp.begin()+1 , publictp.begin()+m+1);
- dp[0][0]=0;
- for( ll i = 1 ; i <= m ; i++)
- {
- if( dp[0][i-1] < publictp[i].first - publictp[i].second +1)
- {
- dp[0][i] = publictp[i].first;
- }
- else if(dp[0][i-1] >= publictp[i].first - publictp[i].second +1 && dp[0][i-1] < publictp[i].first)
- {
- dp[0][i] = dp[0][i-1]+publictp[i].second;
- }
- else{
- flag = 1;
- break;
- }
- }
- if( flag == 1)
- {
- cout << -1 << "\n" ;
- break;
- }
- flag = 0;
- for( ll i = 1 ; i <= n ; i++)
- {
- dp[i][0] = dp[i-1][0] + q[i];
- }
- for( ll i = 1 ; i <= n ; i++)
- {
- flag = 0;
- ll v = i;
- for( ll j = 1 ; j <= m ; j++)
- {
- v=i;
- if(!visitedp[j])
- {
- if( dp[i][j-1]< publictp[j].first)
- {
- if(dp[i][j-1] < publictp[j].first - publictp[j].second+1)
- {
- dp[i][j] = publictp[j].first;
- }
- else
- {
- dp[i][j] = dp[i][j-1]+publictp[j].second;
- }
- }
- else
- {
- while(v >= 0)
- {
- if (dp[v][j - 1] < publictp[j].first) {
- dp[i][j] = dp[v][j] + dp[i][0] - dp[v][0];
- pge[j] = v;
- visitedp[j] = true;
- flag = 2;
- break;
- }
- v--;
- }
- if(flag!= 2)
- {
- flaag = 10;
- break;
- }
- }
- }
- else if(visitedp[j])
- {
- dp[i][j] = dp[pge[j]][j] + dp[i][0] - dp[pge[j]][0];
- }
- }
- if( flaag == 10)
- {
- flaag = 0;
- flaaag = 10;
- break;
- }
- }
- if( flaaag == 10)
- {
- cout << -1 << "\n";
- flaaag = 0;
- break;
- }
- cout << dp[n][m] << "\n";
- // for( ll i = 0 ; i <= n ; i++)
- // {
- // for (ll j = 0 ; j <= m; j++)
- // {
- // cout << dp[i][j] << " ";
- // }
- // cout << endl;
- // }
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment