75!求助,哪错了
查看原帖
75!求助,哪错了
752257
Miangoa楼主2023/5/7 17:01
#include<bits/stdc++.h>

using namespace std;

int n,m,k,x[10001][2],p[10001][2];
int f[10001][1001][2];

void read_p() {
	int p_,l,h;
	scanf("%d %d %d",&p_,&l,&h);
	p[p_][0]=h;
	p[p_][1]=l;
}

int main() {
	scanf("%d %d %d",&n,&m,&k);
	for(int i=1; i<=n; i++) {
		scanf("%d %d",&x[i][0],&x[i][1]);
		p[i][0]=m+1;
		f[0][i][0]=1;
	}
	for(int i=1; i<=k; i++)
		read_p();
	for(int i=1; i<=n; i++) {
		bool can=false;
		for(int j=1; j<=m; j++) {
			if(f[i-1][j][0]) {
				int k=0;
				if(j-x[i][1]>p[i][1]&&j-x[i][1]<p[i][0])
					f[i][j-x[i][1]][1]=(f[i][j-x[i][1]][0]?min(f[i][j-x[i][1]][1],f[i-1][j][1]):f[i-1][j][1]),f[i][j-x[i][1]][0]=1;
				for(k=1; j+k*x[i][0]<=m; k++)
					if(j+k*x[i][0]>p[i][1]&&j+k*x[i][0]<p[i][0])
					f[i][j+k*x[i][0]][1]=(f[i][j+k*x[i][0]][0]?min(f[i][j+k*x[i][0]][1],f[i-1][j][1]+k):f[i-1][j][1]+k),f[i][j+k*x[i][0]][0]=1;
				if(m>p[i][1]&&m<p[i][0])
					f[i][m][1]=(f[i][m][0]?min(f[i][m][1],f[i-1][j][1]+k):f[i-1][j][1]+k),f[i][m][0]=1;
			}
		}
		for(int j=1; j<=m; j++)
			if(f[i][j][0]) {
				can=true;
				break;
			}
		if(!can) {
			int num=0;
			for(int j=1; j<i; j++)
				if(p[j][0]!=m+1)
					num++;
			printf("0\n%d",num);
			return 0;
		}
	}
	int c=0,mi=INT_MAX;
	for(int i=1; i<=m; i++)
		if(f[n][i][0]>0)
			c=1,mi=min(mi,f[n][i][1]);
	printf("%d\n%d",c,mi);
}
2023/5/7 17:01
加载中...