蒟蒻调了一个小时了,还是TLE on #10 #13
查看原帖
蒟蒻调了一个小时了,还是TLE on #10 #13
267428
Access57楼主2022/8/18 10:44
#include<bits/stdc++.h>
const int Max = 10100;
int dp[Max][1010],x,y,k,u[Max],d[Max],p,l[Max],h[Max],tx,fto,ans,pas;//l-down <-> h-high
bool vis[Max];
using namespace std;
inline bool judge(int x,int nh)
{
	if((vis[x]==0&&nh>0)||(nh>l[x]&&nh<h[x])) return 1;
	return 0;
}
int main()
{
	ios::sync_with_stdio(0);
	memset(dp,127,sizeof(dp)),ans=dp[0][0];
	cin>>x>>y>>k;
	for(register int i=1;i<=x;i++) cin>>u[i]>>d[i];
	for(register int i=0;i<k;i++) cin>>p,cin>>l[p]>>h[p],vis[p]=1;
	for(register int i=1;i<=y;i++) dp[0][i]=0;
	for(register int i=1;i<=x;i++) 
	{
		int q=1,temp=y;
		if(vis[i-1]) q=l[i-1],temp=h[i-1];
		for(register int j=q;j<=temp;j++)
		{
			if(dp[i-1][j]!=dp[0][0]) 
			{
				//cout<<judge(2,10)<<"<-";
				for(register int t=1;t*u[i]+j<=y+u[i]+1;t++)
				{
					if(judge(i,t*u[i]+j))
					{
						if(j+t*u[i]>=y)
						{
							dp[i][y]=min(dp[i-1][j]+t,dp[i][y]);
							break;
						}
						dp[i][j+t*u[i]]=min(dp[i-1][j]+t,dp[i][j+t*u[i]]),fto=i;//,cout<<"("<<i<<","<<j+t*u[i]<<") step:"<<dp[i][j+t*u[i]]<<"\n";
						if(!u[i]) break;
					}
				}
				if(judge(i,j-d[i])) dp[i][j-d[i]]=min(dp[i-1][j],dp[i][j-d[i]]),fto=i;//,cout<<"("<<i<<","<<j-d[i]<<") step:"<<dp[i][j-d[i]]<<"\n";
			}
		}
		if(fto==i&&vis[i]) pas++;
	}
		
	cout<<(fto==x)<<"\n";
	for(register int i=1;i<=y;i++) ans=min(ans,dp[x][i]);
	if(ans==dp[0][0]) cout<<pas;
	else cout<<ans;
}
2022/8/18 10:44
加载中...