C语言动规问题

Python046

C语言动规问题,第1张

#include<stdio.h>//滑雪、、搜索+动态规划

#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,偶数分钟时高度减d

int 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("<格式说明字符串>",<变量地址>)变量地址要求有效,并且与格式说明的次序一致。