답안 #18079

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
18079 2016-01-20T04:06:25 Z comet 매트 (KOI15_mat) C++14
57 / 100
1000 ms 107348 KB
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>

using namespace std;

struct mat{
	int l,r,h,k;
	bool operator<(const mat& r)const{
		return l<r.l;
	}
}a[2][3010];

int N,W;
int sz[2];

int dp[3010][3010];
int opt[2][3010][3010];

bool cross(int x,int y){
	if(a[0][x].r<=a[1][y].l)return 0;
	if(a[0][x].l>=a[1][y].r)return 0;
	if(a[0][x].h+a[1][y].h<=W)return 0;
	return 1;
}

int main(){

	memset(opt,-1,sizeof(opt));

	scanf("%d%d",&N,&W);

	for(int i=0;i<2;i++){
		a[i][sz[i]++]=mat{0,0,0,0};
	}

	int p,l,r,h,k;
	for(int i=0;i<N;i++){
		scanf("%d%d%d%d%d",&p,&l,&r,&h,&k);
		a[p][sz[p]++]=mat{l,r,h,k};
	}

	for(int i=0;i<2;i++){
		sort(a[i],a[i]+sz[i]);
		a[i][sz[i]]=mat{1e9,1e9,0,0};
	}

	/*for(int i=0;i<2;i++,puts("")){
		for(int j=0;j<=sz[i];j++){
			printf("(%d,%d,%d,%d) ",a[i][j].l,a[i][j].r,a[i][j].h,a[i][j].k);
		}
	}
	puts("-----------------------------------------------------------------------");
*/
	for(int i=0;i<=sz[0];i++){
		for(int j=0;j<=sz[1];j++){

			dp[i][j]=-1e9;

			if(cross(i,j))continue;
			// if(cross(i,j))goto apple;

			dp[i][j]=a[0][i].k+a[1][j].k;

			for(int k=0;k<i;k++){
				if(a[0][k].r>a[0][i].l)continue;
				if(cross(k,j))continue;

				if(opt[1][k][j]>=0&&a[1][opt[1][k][j]].r>a[0][i].l)continue;
				if(dp[i][j]<dp[k][j]+a[0][i].k){
					dp[i][j]=dp[k][j]+a[0][i].k;
					opt[0][i][j]=k;
					opt[1][i][j]=opt[1][k][j];
				}
			}

			for(int k=0;k<j;k++){
				if(a[1][k].r>a[1][j].l)continue;
				if(cross(i,k))continue;

				if(opt[0][i][k]>=0&&a[0][opt[0][i][k]].r>a[1][j].l)continue;
				if(dp[i][j]<dp[i][k]+a[1][j].k){
					dp[i][j]=dp[i][k]+a[1][j].k;
					opt[1][i][j]=k;
					opt[0][i][j]=opt[0][i][k];
				}
			}

			// apple:

			// printf("%d (%d,%d) ",dp[i][j],opt[0][i][j],opt[1][i][j]);

		}
		// puts("");
	}

	printf("%d\n",dp[sz[0]][sz[1]]);

	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 107348 KB Output is correct
2 Correct 4 ms 107348 KB Output is correct
3 Correct 0 ms 107348 KB Output is correct
4 Correct 4 ms 107348 KB Output is correct
5 Correct 8 ms 107348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 107348 KB Output is correct
2 Correct 3 ms 107348 KB Output is correct
3 Correct 4 ms 107348 KB Output is correct
4 Correct 5 ms 107348 KB Output is correct
5 Correct 7 ms 107348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 12 ms 107348 KB Output is correct
2 Correct 8 ms 107348 KB Output is correct
3 Correct 8 ms 107348 KB Output is correct
4 Correct 8 ms 107348 KB Output is correct
5 Correct 8 ms 107348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 65 ms 107348 KB Output is correct
2 Correct 48 ms 107348 KB Output is correct
3 Correct 58 ms 107348 KB Output is correct
4 Correct 62 ms 107348 KB Output is correct
5 Correct 53 ms 107348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 51 ms 107348 KB Output is correct
2 Execution timed out 1000 ms 107344 KB Program timed out
3 Halted 0 ms 0 KB -