75pts,WA了#3 #6 #9 #11 #13,哪位大佬能帮我调调代码呢?
查看原帖
75pts,WA了#3 #6 #9 #11 #13,哪位大佬能帮我调调代码呢?
658786
STUDENT00楼主2022/8/27 20:12

代码很好理解,帮我调调吧!(^-^)

#include<bits/stdc++.h>
using namespace std;
int n,m,k,x[10010],y[10010],p,l,h,u[10010],d[10010],dp[10010][1010],mins=1e9;
bool vis[100010];
int main(){
	scanf("%d%d%d",&n,&m,&k);
	for(int i=0;i<n;i++) scanf("%d%d",&x[i],&y[i]);
	for(int i=0;i<=n;i++){
		u[i]=m+1;
		d[i]=0;
	}
	for(int i=1;i<=k;i++){
		scanf("%d%d%d",&p,&l,&h);
		vis[p]=1;
		u[p]=h;
		d[p]=l;
	}
	memset(dp,127,sizeof(dp));
	for(int i=1;i<=m;i++) dp[0][i]=0;
	for(int i=1;i<=n;i++){
		for(int j=d[i]+1;j<=u[i]-1;j++){
			for(int z=1;j-z*x[i-1]>=d[i-1]+1;z++) dp[i][j]=min(dp[i][j],dp[i-1][j-z*x[i-1]]+z);
			if(j==m&&j>=x[i-1]){
				for(int z=u[i-1]-1;z>j-x[i-1];z--) dp[i][j]=min(dp[i][j],dp[i-1][z]+1);
			}
			if(j+y[i-1]<=u[i-1]-1) dp[i][j]=min(dp[i][j],dp[i-1][j+y[i-1]]);
		}
	}
	for(int i=1;i<=m;i++) mins=min(mins,dp[n][i]);
	if(mins==1e9){
		printf("0\n");
		int p=0;
		for(int i=n;i>=1;i--){
			bool flag=0;
			for(int j=1;j<=m;j++){
				if(dp[i][j]<=1e9){
					flag=1;
					break;
				}
			}
			if(flag){
				printf("%d",k-p);
				break;
			}
			if(vis[i]) p++;
		}
	}else printf("1\n%d",mins);
	return 0;
}
2022/8/27 20:12
加载中...