过不了样例,求改
查看原帖
过不了样例,求改
499463
zshcchenyi楼主2024/6/19 17:12
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10;
const int M=1e3+10;
int n,m,k;
int x[N],y[N];
struct node{
	int p,l,h;
}guan[N];
int be[M],now[M];
bool cmp(node a,node b){
	return a.p<b.p;
}
struct edge{
	bool you;
	int wei;
}tong[N];
int main(){
	cin>>n>>m>>k;
	memset(now,0x3f,sizeof now);
	memset(be,0,sizeof be);
	for(int i=1;i<n;i++){
		cin>>x[i]>>y[i];
	}
	for(int i=1;i<=k;i++){
		cin>>guan[i].p>>guan[i].l>>guan[i].h;
	}
	sort(guan+1,guan+k+1,cmp);
	for(int i=1;i<=k;i++){
		tong[guan[i].p].you=1;
		tong[guan[i].p].wei=i;
	}
	for(int i=1;i<=n;i++){//列 
		for(int j=1;j<=m;j++){//行 
			for(int k=0;;k++){//上一行点的次数	
			
				if(tong[i].you){
					if(j>guan[tong[i].wei].h&&j<guan[tong[i].wei].l){
						if(j-k*x[i-1]<0&&k!=0){
							break;
						}
						if(j+y[i-1]>m&&k==0){
							continue;
						}
						if(k==0){
							now[j]=min(now[j],be[j+y[i-1]]);
						}else{
							now[j]=min(now[j],be[j-k*x[i-1]]+k);
						}
					}
				}
				
			}
		}
		for(int i=1;i<=m;i++){
			be[i]=now[i];
			now[i]=0x3f3f3f3f;
		}
	}
	int minn=0x3f3f3f3f-1;
	for(int i=1;i<=n;i++){
		minn=min(minn,be[i]);
	}
	if(minn==0x3f3f3f3f-1){
		cout<<0;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				
			}
		}
	}else{
		cout<<1<<endl<<minn<<endl;
	}
	return 0;
}/*
10 10 6 
3 9  
9 9  
1 2  
1 3  
1 2  
1 1  
2 1  
2 1  
1 6  
2 2  
1 2 7 
5 1 5 
6 3 5 
7 5 8 
8 7 9 
9 1 3 

1
6
*/
2024/6/19 17:12
加载中...