90分求调 WA on #12 #13
查看原帖
90分求调 WA on #12 #13
930325
Li_Yichen楼主2024/2/24 21:29
#include<bits/stdc++.h>
using namespace std;
int n,m,k;
int x[10005],y[10005];
int low[10005],high[10005];
int dp[10005][2005]; 
int ans = 0x3f3f3f3f;
int main(){
	memset(dp,0x3f,sizeof(dp));
	cin >> n >> m >> k;
	for(int i=1;i<=n;i++){
		dp[0][i] = 0;
	}
	for(int i=1;i<=n;i++){
		high[i] = m;
		low[i] = 1;
		cin >> x[i] >> y[i];
	}
	for(int i=1;i<=k;i++){
		int p,l,h;
		cin >> p >> l >> h;
		low[p] = l+1;
		high[p] = h-1;
	}
	for(int i=1;i<=n;i++){
		for(int j=x[i]+1;j<=x[i]+m;j++){
			if(j <= m) dp[i][j] = min(dp[i-1][j-x[i]]+1,dp[i][j-x[i]]+1);
			else dp[i][m] = min(dp[i][m],min(dp[i-1][j-x[i]]+1,dp[i][j-x[i]]+1));
		}
		for(int j=1;j<=m-y[i];j++){
			dp[i][j] = min(dp[i][j],dp[i-1][j+y[i]]);
		}
		for(int j=1;j<low[i];j++){
			dp[i][j] = 0x3f3f3f3f;
		}
		for(int j=high[i]+1;j<=m;j++){
			dp[i][j] = 0x3f3f3f3f;
		}
	}
	for(int i=1;i<=m;i++){
		ans = min(ans,dp[n][i]);
	}
	if(ans < 0x3f3f3f3f){
		cout << 1 << endl << ans;
		return 0;
	}else{
		for(int i=n;i>=1;i--){
			for(int j=1;j<=m;j++){
				if(dp[i][j] < 0x3f3f3f3f){
					int cnt = 0;
					for(int k=1;k<=i;k++){
						if(low[k] != 1||high[k] != m) cnt++;
					}
					cout << 0 << endl << cnt;
					return 0;
				}
			}
		}
	}
	return 0;
}

输入
6 8 0
4 1
3 6
6 5
3 5
3 2
3 5

答案
1
2

我的答案
1
2
2024/2/24 21:29
加载中...