WA 80pts求助 除了样例和最后一个点其他都过了
查看原帖
WA 80pts求助 除了样例和最后一个点其他都过了
385165
ZeroF楼主2023/8/16 09:19
#include<bits/stdc++.h>
#define int long long
using namespace std;
int dp[11451][114];
int m[11451],l[11451],a[11451],c[11451],d[11451];
int mind[11451];
signed main(){
	memset(mind,0x3f,sizeof(mind));
	int t,s,n,cm=-114514;
	cin>>t>>s>>n;
	for(int i=1;i<=s;i++){
		cin>>m[i]>>l[i]>>a[i];
		m[i]+=l[i];
		cm=max(cm,a[i]);
	}
	for(int i=1;i<=n;i++){
		cin>>c[i]>>d[i];
		mind[c[i]]=min(mind[c[i]],d[i]);
		for(int j=c[i];j<=110;j++){
			mind[j]=min(mind[c[i]],mind[j]);
		}
	}
	//dp[i][j]:在时刻i当前能力值为j是最大滑雪次数 
	for(int i=0;i<=t;i++){
		for(int j=1;j<=cm;j++){
			dp[i][j]=dp[i-1][j];
			for(int k=1;k<=s;k++){
				if(m[k]==i&&a[k]>j&&i-l[k]>=0)dp[i][a[k]]=max(dp[i-l[k]][j],dp[i][a[k]]);
			}
			if(i-mind[j]>=0)dp[i][j]=max(dp[i][j],dp[i-mind[j]][j]+1);
		}
	}
	int ans=dp[t][1];
	for(int i=1;i<=s;i++){
		ans=max(ans,dp[t][a[i]]);
	}
	cout<<ans<<endl;
	return 0;
} 
2023/8/16 09:19
加载中...