记录编号 320334 评测结果 AAAAAAAAAA
题目名称 [HZOI 2016]小象和老鼠 最终得分 100
用户昵称 GravatarGo灬Fire 是否通过 通过
代码语言 C++ 运行时间 0.597 s
提交时间 2016-10-11 21:03:10 内存使用 12.96 MiB
显示代码纯文本
  1. /*
  2. Name: 小象和老鼠COJS
  3. Copyright:
  4. Author: Go灬Fire
  5. Date: 11/10/16 21:00
  6. Description: 此题由于上次转移的状态对这次转移也有影响,
  7. 因此要记录该状态是从上边还是左边转移过来的
  8. 然后画图分析,即可
  9. */
  10. #include<cmath>
  11. #include<cstring>
  12. #include<cstdio>
  13. #include<algorithm>
  14. #include<cstdlib>
  15. #include<iostream>
  16. #define Begin freopen("lemouse.in","r",stdin);freopen("lemouse.out","w",stdout);
  17. #define End fclose(stdin);fclose(stdout);
  18. using namespace std;
  19. const int maxn=1010;
  20. int n,m,f[maxn][maxn][3];
  21. bool a[maxn][maxn];
  22. void Init();
  23. //f[i][j][0]从左边转移过来,f[i][j][1]从上边转移过来
  24. int main(){
  25. Begin;
  26. Init();
  27. //system("pause");
  28. End;
  29. return 0;
  30. }
  31. void Init(){
  32. scanf("%d%d",&n,&m);
  33. for(int i=1;i<=n;i++){
  34. for(int j=1;j<=m;j++){
  35. scanf("%d ",&a[i][j]);
  36. }
  37. }
  38. memset(f,0x7f,sizeof(f));
  39. f[1][1][0]=f[1][1][1]=a[1][1]+a[1][2]+a[2][1];
  40. for(int i=1;i<=n;i++){
  41. for(int j=1;j<=m;j++){
  42. if(i==1 && j==1)continue;
  43. f[i][j][0]=min(f[i][j-1][0]+a[i-1][j],f[i][j-1][1])+a[i][j+1]+a[i+1][j];
  44. f[i][j][1]=min(f[i-1][j][1]+a[i][j-1],f[i-1][j][0])+a[i][j+1]+a[i+1][j];
  45. }
  46. }
  47. printf("%d\n",min(f[n][m][0],f[n][m][1]));
  48. }