这里我的思路是先贪心,最后6步时在搜索,不会超时,但WA了两个。不知道哪里错了。
c++代码
#include <bits/stdc++.h>
using namespace std;
int m,s,t,sum=INT_MAX,num,now,x;
bool flag=false;
void dfs(int step,int w,int ma)
{
if(step>=t&&w<=s)
{
num=max(w,num);
return ;
}
else if(w>s)
{
flag=true;
sum=min(sum,step);
return ;
}
if(ma>=10)
dfs(step+1,w+60,ma-10);
else
{
dfs(step+1,w,ma+4);
dfs(step+1,w+17,ma);
}
}
int main()
{
cin>>m>>s>>t;
while(t-now>6)
{
++now;
if(m>=10)
{
m-=10;
x+=60;
}
else
{
m+=4;
}
}
dfs(now,x,m);
if(flag==true)
{
cout<<"Yes"<<endl<<sum;
}
else
{
cout<<"No"<<endl<<num;
}
return 0;
}
求大佬帮助,万分感谢。