70pts求助
查看原帖
70pts求助
959548
youwhenway_second楼主2024/10/14 21:26
#include<bits/stdc++.h>
using namespace std;
int n,m,k,a[1005],b[1005],dp[1005][5005];
int to(int u,int v){
	int m=1,d=0;
	for (int i=1;;i++){
		//cout<<m<<' '<<d<<'\n';
		d++;
		if (d==32)if (m==1||m==3||m==5||m==7||m==8||m==10||m==12)m++,d=1;
		if (d==31)if (m==4||m==6||m==9||m==11)m++,d=1;
		if (d==29)if (m==2)m++,d=1;
		if (m==u&&d==v)return i;
	}
}
int dfs(int i,int sum){
	if (dp[i][sum]!=-1)return dp[i][sum];
	auto it=lower_bound(a+1,a+n+1,a[i]+k);
	int res=sum;
	//cout<<i<<' '<<distance(a,it)<<'\n';
	for (int j=distance(a,it);j<=n;j++){
		if (sum+b[j]<=m)res=max(res,dfs(j,sum+b[j]));
	}
	return dp[i][sum]=res;
}
signed main(){
	cin>>n>>m>>k;
	for (int i=1;i<=n;i++){
		int m,d;
		cin>>m>>d>>b[i];
		a[i]=to(m,d);
	}
	for (int i=1;i<n;i++){
		for (int j=i+1;j<=n;j++){
			if (a[i]>a[j])swap(a[i],a[j]),swap(b[i],b[j]);
		}
	}
	memset(dp,-1,sizeof dp);
	int ans=0;
	for (int i=1;i<=n;i++)ans=max(ans,dfs(i,b[i]));
	cout<<ans;
	return 0;
}
2024/10/14 21:26
加载中...