社区讨论
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 条回复,欢迎继续交流。
正在加载回复...