#define max(a,b) a>b?a:b
int m,n
int map[105][105]
int step[105][105]//动态规划出最大的step-length
bool hash[105][105]//标记是否被走过
int dir[4][2]={-1,0,1,0,0,1,0,-1}//四个方向
int bfs(int x,int y)//写错了,这是深搜得代码。不是广搜
{
int count=0,i
if(step[x][y]!=1)return step[x][y]//返回已经确定的最优step
for(i=0i<4i++)
{
int a=x+dir[i][0]
int b=y+dir[i][1]
if(a>=0&&a<m&&b>=0&&b<n&&map[a][b]>map[x][y])//判断该点是否可以走
count=max(count,bfs(a,b))//递归调用向四个方向寻找
}
step[x][y]=count+step[x][y]//统计step
return step[x][y]//返回step
}
int main()
{
int i,j
while(scanf("%d %d",&m,&n)!=EOF)
{
int ans=0
for(i=0i<mi++)
{
for(j=0j<nj++)
{
scanf("%d",&map[i][j])
hash[i][j]=false//初始化设置为都没有走过
step[i][j]=1//初始化
}
}
for(i=0i<mi++)
{
for(j=0j<nj++)
{
ans=max(ans,bfs(i,j))//枚举---以所有的点为起点,并搜索寻找最优解
}
}
printf("%d\n",ans)
}
return 0
}
思路是这样的,在不超过瓶口的时候,奇数分钟时高度加u,偶数分钟时高度减dint run(float n,float u,float d)
{
float high=0
int time=0
while(high<n)
{
time++
if(time%2==1)
high=high+u
else
high-=d
}
return time
}
1、C语言中scanf 如何实现连续换行输入:
#include <stdio.h>int main(){
int value
while(scanf("%d", &value) != EOF){ // 可以连续换行输入value
// 需要执行的代码
}
return 0
}
2、scanf函数原型:int scanf(const char *format,...)
返回值:scanf()函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF。(EOF值为-1)。
调用:其调用形式为: scanf("<格式说明字符串>",<变量地址>)变量地址要求有效,并且与格式说明的次序一致。