TLE 90pts 求调
查看原帖
TLE 90pts 求调
685964
shuqiang楼主2025/2/6 14:58
#include<iostream>

using namespace std;

const int N = 1e4 + 10, M = 1e3 + 10;
int n, m, k, x[N], y[N], p, l[N], h[N], cnt[N], f[M][2], g[M][2], ans = 1e9;

int read_int(){
    int x = 0; char ch = ' '; while(!isdigit(ch)) ch = getchar();
    while(isdigit(ch)) {x = x * 10 + ch - '0'; ch = getchar();} return x;
}

int main(){
	n = read_int(); m = read_int(); k = read_int();
	for(int i = 0; i < n; i++) l[i] = 0, h[i] = m + 1;
	for(int i = 0; i < n; i++) {x[i] = read_int(); y[i] = read_int();}
	for(int i = 0; i < k; i++) {p = read_int(); cnt[p]++; l[p] = read_int(); h[p] = read_int();}
	for(int i = 1; i < n; i++) cnt[i] += cnt[i-1];
	for(int i = 0; i <= m; i++) f[i][0] = true;
	for(int i = 0; i < n; i++){
		bool flag = true;
		for(int j = 0; j <= m; j++) f[j][(i+1)%2] = false, g[j][(i+1)%2] = 1e9;
		for(int j = l[i]+1; j <= h[i]-1; j++){
			if(f[j][i%2]){
				flag = false;
				int c = 1;
				for(int o = j + x[i]; o < h[i+1]; o += x[i]){
					f[o][(i+1)%2] = true;
					g[o][(i+1)%2] = min(g[j][i%2] + c, g[o][(i+1)%2]);
					c++;
				}
				f[m][(i+1)%2] = true;
				g[m][(i+1)%2] = min(g[j][i%2] + c, g[m][(i+1)%2]);
				if(j-y[i] > 0) f[j-y[i]][(i+1)%2] = true, g[j-y[i]][(i+1)%2] = min(g[j][i%2], g[j-y[i]][(i+1)%2]);
			}
		}
		if(flag) {cout << 0 << '\n' << cnt[i-1]; return 0;}
	}
	cout << 1 << '\n';
	for(int i = 0; i <= m; i++) ans = min(ans, g[i][n%2]);
	cout << ans;
	return 0;
}
2025/2/6 14:58
加载中...