75pts求条(小号关注)
查看原帖
75pts求条(小号关注)
563663
xu222ux楼主2023/12/14 22:22

球球了

#include<bits/stdc++.h>
using namespace std;
# define int long long
const int inf=1e18;
long long t,n,m;
long long f[10004][2003],ansout[10004],out;
struct game{
	int x,y;
}a[10004];
struct d{
	long long p,l,r;
}b[10004];
bool cmp(d pai,d xu){
	return pai.p<xu.p;
}
signed main(){
//	freopen("4015.in","r",stdin);
	//freopen("4015.out","w",stdout);
	cin>>m>>n>>t;
	for(int i=1;i<=m;i++)cin>>a[i].x>>a[i].y;
	for(int i=1;i<=t;i++)cin>>b[i].p>>b[i].l>>b[i].r;
	sort(b+1,b+1+t,cmp);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			f[i][j]=inf;
	for(int i=1;i<=t;i++){
		//cout<<b[i].p;
		for(int j=n+1;j>=n+1-b[i].l;j--)f[j][b[i].p]=-1;
		for(int j=1;j<=n-b[i].r+1;j++)f[j][b[i].p]=-1;
		ansout[b[i].p]=i;
	}
	/*for(int i=1;i<=n;i++){
		for(int j=0;j<=m;j++){
			cout<<f[i][j]<<' ';
		}
		cout<<endl;
	}
	cout<<endl<<endl;*/
	for(int j=1;j<=m;j++){
		bool flag=false;
		for(int i=n;i>=1;i--){
			if(f[i][j]==-1){/*cout<<-1<<' ';*/continue;}
			if(i==1){
				for(int k=1;k<=n;k++){
					if(f[k][j-1]==-1)continue;	
					int bushu;		
					if(k==1)bushu=1;
					else bushu=(k-1+a[j].x-1)/a[j].x;
					f[i][j]=min(f[i][j],f[k][j-1]+bushu);
				}
				if(i-a[j].y>0&&f[i-a[j].y][j-1]!=-1)f[i][j]=min(f[i][j],f[i-a[j].y][j-1]);
			}else{
				/*int k=0;
				while(++k){
					if(i+a[j].x*k>n)break;
					if(f[i+a[j].x*k][j-1]==-1)continue;
					f[i][j]=min(f[i][j],f[i+a[j].x*k][j-1]+k);
				}*/
				if(i-a[j].y>0&&f[i-a[j].y][j-1]!=-1){f[i][j]=f[i-a[j].y][j-1];}
				if(i+a[j].x<=n){
					if(f[i+a[j].x][j-1]!=-1||f[i+a[j].x][j]!=-1){
						//cout<<f[i][j];
						int c=min(f[i+a[j].x][j-1]==-1?inf-1:f[i+a[j].x][j-1],f[i+a[j].x][j]==-1?inf-1:f[i+a[j].x][j]);
						//cout<<c;
						f[i][j]=min(f[i][j],c+1);
					}
				}
			}
			if(f[i][j]==inf)f[i][j]=-1;
			else flag=true;
			//cout<<f[i][j]<< ' ';
		}
		if(!flag){
			cout<<0<<endl<<ansout[j]-1;
			return 0;
		}
		//cout<<endl;
	}
	cout<<1<<endl;
	int ans=inf;
	for(int i=1;i<=n;i++){
		//cout<<f[i][m]<<' ';
		if(f[i][m]==0)continue;
		ans=min(f[i][m]==-1?inf:f[i][m],ans);
	}
	cout<<ans;
	return 0;
}
2023/12/14 22:22
加载中...