纯算法问题 求大神解答

Ventery 2014-05-20 08:14:34
问题描述
  X 国王有一个地宫宝库。是 n x m 个格子的矩阵。每个格子放一件宝贝。每个宝贝贴着价值标签。

  地宫的入口在左上角,出口在右下角。

  小明被带到地宫的入口,国王要求他只能向右或向下行走。

  走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿)。

  当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可以送给小明。

  请你帮小明算一算,在给定的局面下,他有多少种不同的行动方案能获得这k件宝贝。
输入格式
  输入一行3个整数,用空格分开:n m k (1<=n,m<=50, 1<=k<=12)

  接下来有 n 行数据,每行有 m 个整数 Ci (0<=Ci<=12)代表这个格子上的宝物的价值
输出格式
  要求输出一个整数,表示正好取k个宝贝的行动方案数。该数字可能很大,输出它对 1000000007 取模的结果。
样例输入
2 2 2
1 2
2 1
样例输出
2
只知道是动态规划,虽说本菜动态规划写过一些,但还是不会写啊,求大神指点!!!!!
...全文
158 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ventery 2014-05-22
  • 打赏
  • 举报
回复
引用 1 楼 FancyMouse 的回复:
dp[x][y][z]表示人在x格,手上有y个宝物,最大价值是z的时候的最优值。
方程我写出来了,但是边界条件不知道怎么写 n行m列 for (a=2;a<=m+n;a++) for (b=1;b<=min(n,a-1);b++) { e=map[b][a-b]; for (c=1;c<=min(a-1,k);c++) { for (d=1;d<=12;d++) arr[b][a-b][c][d]=(arr[b][a-b][c][d]+arr[b-1][a-b][c][d]+arr[b][a-b-1][c][d]-arr[b-1][a-b-1][c][d])%DF; if (e) arr[b][a-b][c][e]=(arr[b][a-b][c][e]+arr[b-1][a-b][c-1][e-1]+arr[b][a-b-1][c-1][e-1]-arr[b-1][a-b-1][c-1][e-1])%DF; } }
FancyMouse 2014-05-21
  • 打赏
  • 举报
回复
dp[x][y][z]表示人在x格,手上有y个宝物,最大价值是z的时候的最优值。

65,209

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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