#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int maxn=99999999;
int T,m,n;
int pa[105],f[1005];
int ans;
struct node
{
int l,last,v;
}a[1005],b[100005];
int mx(int x,int y)
{
return x>y?x:y;
}
int mn(int x,int y)
{
return x<y?x:y;
}
int cmp(const node n1,const node n2)
{
return n1.l<n2.l;
}
int main()
{
freopen("class.in","r",stdin);
freopen("class.out","w",stdout);
int i,j;
scanf("%d%d%d",&T,&m,&n);
for(i=1;i<=m;i++)
scanf("%d%d%d",&a[i].l,&a[i].last,&a[i].v);//,mxx=mx(mxx,a[i].v);
sort(a+1,a+1+m,cmp);
for(i=0;i<=100;i++)pa[i]=maxn;
for(i=1;i<=n;i++)
{
scanf("%d%d",&b[i].last,&b[i].v);
pa[b[i].v]=min(pa[b[i].v],b[i].last);//printf("%d %d\n",pa[b[i].v],b[i].last);
}
for(i=1;i<=100;i++)
{
pa[i]=mn(pa[i],pa[i-1]);
}
//for(i=1;i<=100;i++)printf("%d ",pa[i]);
a[0].l=0;a[m+1].l=T+1;a[0].v=1;a[0].last=1;
for(i=1;i<=m+1;i++)
for(j=0;j<i;j++)
{ // 16 0 0 /1
if(a[i].l-(a[j].l+a[j].last)<0)continue;
f[i]=mx(f[i],f[j]+(a[i].l-(a[j].l+a[j].last))/pa[a[j].v]);
//ans=mx(ans,f[i]);
//printf("%d:%d,%d ",a[i].l-(a[j].l+a[j].last),i,j);
}
printf("%d\n",f[m+1]);
return 0;
}
10.1 T3
最新推荐文章于 2025-10-26 20:21:26 发布
343

被折叠的 条评论
为什么被折叠?



