看看代码呗
查看原帖
看看代码呗
782904
哈哈人生楼主2023/7/13 16:52
/*
比赛数、最多比赛数、初始分
类型、分
dp[i][j]:在i场比赛前参加j场比赛的最高分
dp[i][j]=max(dp[i-1][j],dp[i][j-1])+f
*/
#include<bits/stdc++.h>
using namespace std;
int n,k,x,dp[5005][5005][2],a[2][5005];
int bh(int i,int bs) {
	int &j=a[1][bs];
	//cout<<a[0][bs]<<" "<<bs<<" "<<i<<" "<<j<<endl;
	if(a[0][bs]==1)return i+floor(1.0*(j-i)/4.0);
	else {
		if(i>=1900)return i;
		else return i+floor(1.0*(j-i)/4.0);
	}
}
int main() {
	cin>>n>>k>>x;
	for(int i=1; i<=n; i++)cin>>a[0][i]>>a[1][i];
	for(int i=1; i<=k; i++)dp[0][i][0]=x;
	for(int i=1; i<=n; i++)
		for(int j=1; j<=k; j++)
		    dp[i][j][1]=1<<30;
	for(int i=1; i<=n; i++) {
		for(int j=1; j<=k; j++) {
			dp[i][j][0]=max(max(dp[i][j][0],bh(dp[i-1][j][0],i)),bh(dp[i-1][j][1],i));
			dp[i][j][1]=min(dp[i][j][1],bh(dp[i-1][j][1],i));
			//cout<<dp[i][j][1]<<" ";
		}
		//cout<<"\n";
	}
	//cout<<bh(1900,1)<<"L"<<1900+floor(1.0*(1899-1900)/4.0);
	//cout<<endl<<endl; 
	/*for(int i=0; i<=n; i++) {
		for(int j=1; j<=k; j++) {
			cout<<dp[i][j][0]<<"&"<<dp[i][j][1]<<" ";
		}
		cout<<endl;
	}*/ 
	cout<<max(dp[n][k][0],dp[n][k][1]);
	return 0;
}
2023/7/13 16:52
加载中...