社区讨论

70分WA#2#3#4求调(

P1095[NOIP 2007 普及组] 守望者的逃离参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lyf4p2pl
此快照首次捕获于
2024/07/10 08:55
2 年前
此快照最后确认于
2024/07/10 10:10
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int M,S,T,t;
int firstget=1e8+7;
int cnt,leave;
bool endtime;
int dp[300004][17];
int main()
{
	scanf("%d%d%d",&M,&S,&T);
	if(M>=10)
	cnt=M/10;
	leave=M%10;
	T-=cnt;
	dp[0][leave]=60*cnt;
	if(dp[0][leave]>=S)
	{
		printf("Yes\n");
		int tp=S/60;
		printf("%d\n",tp+1);
		return 0; 
	}
	for(int i=0;i<=T-1&&!endtime;i++)
	{
		for(int j=0;j<=15;j++)
		{
			/*
			dp[i][j]=dp[i-1][j]+17;
			if(j>=4)
			dp[i][j]=max(dp[i][j],dp[i-1][j-4]);
			dp[i][j]=max(dp[i][j],dp[i-1][])*/
			dp[i+1][j]=max(dp[i+1][j],dp[i][j]+17);
			if(dp[i+1][j]>=S)
			{
				firstget=i+1;
				endtime=1;
			}
			if(j>=10)
			{
				dp[i+1][j-10]=max(dp[i+1][j-10],dp[i][j]+60);
				if(dp[i+1][j-10]>=S)
				{
					firstget=i+1;
					endtime=1;
				}
			}
			if(j<=9)
			dp[i+1][j+4]=max(dp[i+1][j+4],dp[i][j]);
		}
	}
	bool can=0;
	int maxium=-1;
	int pos;
	if(firstget==1e8+7)
	pos=T;
	else pos=firstget;
	for(int j=0;j<=15;j++)
	{
		if(dp[pos][j]>=S)
		{
			can=1;
			break;
		}
		maxium=max(maxium,dp[pos][j]);
	}
	if(can)
	{
		printf("Yes\n");
		printf("%d\n",pos+cnt);
	}
	else
	{
		printf("No\n");
		printf("%d\n",maxium);
	}
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...