一道算法题 2013蓝桥杯预选赛 地宫取宝的问题

互联网大喇叭 2015-02-26 09:42:10
刚接触记忆化搜索 提交好几次这道题 只能过两组数据 不知道哪里出错 希望有大神帮忙看看
代码简单有注释
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<string.h>
#define N 1000000007
int map[55][55];
int dp[55][55][15][15]; //dp[i][j][k][n]代表到map[i][j]时最大值为k,当前有n个物品
int m, n, k;
int dfs(int i, int j, int max, int num){
if (dp[i][j][max][num] != -1)
return dp[i][j][max][num];
//如果到达边界
if (i == n){
/*if (j == m - 1 && num == k)
return 1;*/
return 0;
}
int t = 0;
if (map[i][j] > max && num < k){
if (i < n - 1 || j == m - 1)
t = (t + dfs(i + 1, j, map[i][j], num + 1)) % N;
if (j < m - 1)
t = (t + dfs(i, j + 1, map[i][j], num + 1)) % N;
}
if (i < n - 1 || j == m - 1)
t = (t + dfs(i + 1, j, max, num)) % N;
if (j < m - 1)
t = (t + dfs(i, j + 1, max, num)) % N;
return dp[i][j][max][num] = t;
}
int main(){
scanf_s("%d%d%d", &n, &m, &k);
int i, j;
//srand(unsigned(time(NULL)));
for (i = 0; i < n; i++){
for (j = 0; j < m; j++){
/*map[i][j] = rand() % 12;
printf("%d ", map[i][j]);*/
scanf_s("%d", &map[i][j]);
}
printf("\n");
/*scanf("%d", &map[i][j]);*/
}
memset(dp, -1, sizeof(dp));
for (i = 0; i < 15; i++)
dp[n][m - 1][i][k] = 1;
printf("%d\n", dfs(0, 0, 0, 0));
return 0;
}

附上一组正确的测试数据
20 18 6
0 7 2 3 9 1 11 9 7 11 6 9 11 6 10 8 11 6
0 5 4 9 6 9 10 10 1 0 7 1 10 8 0 9 6 5
4 10 10 9 1 9 6 2 4 1 0 6 4 7 3 7 10 7
0 3 11 4 5 9 3 10 9 4 1 7 7 8 10 9 2 11
10 1 4 5 5 10 1 7 6 0 11 5 10 3 3 6 3 5
3 4 3 2 6 0 11 5 3 3 3 4 2 10 3 0 11 11
6 3 5 8 10 9 6 3 5 0 3 7 7 11 6 6 3 6
6 4 2 11 4 7 9 8 7 7 7 0 9 11 0 7 0 9
7 2 9 11 2 6 0 10 5 11 4 7 8 0 6 3 3 10
8 3 6 10 6 9 6 10 8 6 9 10 1 5 6 3 4 2
1 5 9 2 3 6 11 10 5 2 7 10 1 8 11 8 6 0
0 5 1 7 1 8 8 8 9 0 2 0 11 3 10 9 8 0
9 10 0 8 6 2 8 8 4 6 7 2 11 0 4 3 7 9
0 8 2 5 9 3 11 2 9 0 6 6 11 11 1 1 10 8
4 6 0 2 1 8 6 4 7 5 5 2 0 2 5 10 1 6
6 2 1 11 4 9 0 8 7 4 5 10 11 11 6 1 6 4
7 3 10 3 10 10 10 6 9 9 11 7 0 9 11 0 1 5
6 11 9 4 3 6 4 0 9 0 4 11 7 1 2 1 1 10
6 1 4 5 9 9 7 3 3 7 11 2 10 6 8 6 3 4
9 10 3 9 6 4 7 11 3 9 7 4 8 10 1 5 7 0
761196661
...全文
1067 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Oytyoht 2015-04-04
  • 打赏
  • 举报
回复
我也遇到相似的情况,希望我的回答对你有帮助
Oytyoht 2015-04-04
  • 打赏
  • 举报
回复
你把map[i][j]都加1

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧