Submission #899152

#TimeUsernameProblemLanguageResultExecution timeMemory
899152LCJLYPainting Walls (APIO20_paint)C++14
28 / 100
613 ms17372 KiB
#include "paint.h"

#include <bits/stdc++.h>
#define show(x,y) cout << y << " " << #x << endl;
#define show2(x,y,i,j) cout << y << " " << #x << "  " << j << " " << #i << endl;
#define show3(x,y,i,j,p,q) cout << y << " " << #x << "  " << j << " " << #i << "  " << q << " " << #p << endl; 
#define show4(x,y) for(auto it:x) cout << it << " "; cout << #y << endl;

using namespace std;
int n,m,k;
int arr[20005];
set<int>check[2005];
int memo[20005];

int dp(int index){
	if(index==n) return 0;
	else if(index>n-m) return INT_MAX/3;
	if(memo[index]!=-1) return memo[index];
	int ans=INT_MAX/3;
	
	//check
	bool amos=false;
	for(int x=0;x<m;x++){
		bool hayden=true;
		for(int y=0;y<m;y++){
			if(check[x+y].find(arr[index+y])==check[x+y].end()) hayden=false;
		}
		amos|=hayden;
	}
	
	if(amos){
		for(int x=1;x<=m;x++){
			ans=min(ans,dp(index+x)+1);
		}
	}
	//show2(index,index,amos,amos);
	return memo[index]=ans;
}

int minimumInstructions(int N, int M, int K, vector<int>C, vector<int>A, vector<vector<int>>B){
	n=N; m=M; k=K;
	
	for(int x=0;x<n;x++){
		arr[x]=C[x];
	}
	
	for(int x=0;x<m;x++){
		for(int y=0;y<A[x];y++){
			check[x].insert(B[x][y]);
			check[x+m].insert(B[x][y]);
		}
	}
	
	memset(memo,-1,sizeof(memo));
	int hold=dp(0);
	if(hold>n){
		return -1;
	}
	else return hold;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...