85求助
查看原帖
85求助
248899
Afexipt楼主2020/8/31 14:13
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

const int N=10010;
const int M=1010;
int n,m,k;
struct node
{
	int x,y,l,h;
}a[N];

int f[N][M];

int b[N],tot;

int main()
{
	cin>>n>>m>>k;
	for(int i=0;i<n;i++)
	{
		cin>>a[i].x>>a[i].y;
		a[i].h=m+1; a[i].l=0;
	}
	a[n].h=m+1; a[n].l=0;
	for(int p,l,r,i=1;i<=k;i++)
	{
		cin>>p; b[++tot]=p;
		cin>>a[p].l>>a[p].h;
	}

	memset(f,127,sizeof(f));
	for(int i=1;i<=m;i++)  f[0][i]=0;

	for(int i=0;i<n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			f[i][min(j+a[i].x,m)]=min(f[i][j]+1,f[i][min(j+a[i].x,m)]);
			if(j-a[i].y<a[i+1].h&&j-a[i].y>a[i+1].l)  f[i+1][j-a[i].y]=min(f[i][j],f[i+1][j-a[i].y]);
			if(min(m,j+a[i].x)<a[i+1].h&&j+a[i].x>a[i+1].l)  f[i+1][min(m,j+a[i].x)]=min(f[i][j]+1,f[i+1][min(m,j+a[i].x)]);
		}
	}

	int ok=0,ans=2139062143;
	for(int i=1;i<=m;i++)
	{
		if(f[n][i]<2139062143)  ok=1;
		ans=min(ans,f[n][i]);
	}

	cout<<ok<<endl;
	
	if(ok==1)
	{
		cout<<ans<<endl;
		return 0;
	}
	ans=0;
	for(int i=1;i<=tot;i++)
	{
		for(int j=a[b[i]].l+1;j<a[b[i]].h;j++)
		{
			if(f[b[i]][j]<2139062143)
			{
				ans++;
				break;
			}
		}
	}

	cout<<ans<<endl;

	return 0;
}
2020/8/31 14:13
加载中...