博客
关于我
2020.5.7普及C组 数数(count)【纪中】【DP】
阅读量:365 次
发布时间:2019-03-04

本文共 1463 字,大约阅读时间需要 4 分钟。

这是一道经典的动态规划问题,题目要求计算某个网格中从起点到终点的最小花费差。具体来说,网格中的每个单元格(i, j)都有一个花费a[i][j],目标是从起点(1, 1)走到终点(n, m),每一步只能向右或向下移动,循环边界处理时需要注意。

动态转移方程

动态规划的核心方程为:[ f[i][j][w] = (f[i][j][w] + fi-1][j][w - a[i][j]] + fi][j-1][w - a[i][j]]) \mod (10^8 + 7) ]这里,( f[i][j][w] ) 表示到达单元格(i, j)时,花费为w的最小值。方程的意义是,从(i, j)可以从左边(i, j-1)或上边(i-1, j)转移过来,需要减去a[i][j],然后加上当前单元格的花费。

边界处理

在循环处理过程中,需要注意以下几点:

  • 边界值处理:当i=1或j=1时,只能从另一边转移过来。
  • 花费差处理:从小到大处理,避免减法导致负数,确保循环边界正确。
  • 取模操作:每一步都要对结果取模,防止数值溢出。
  • 初始化

    初始化时,起点单元格的花费为:[ f1][1][a[1][1]] = 1 ]这表示从起点出发,花费为a[1][1]的路径只有一条。

    代码实现

    #include 
    #include
    #include
    #include
    #include
    using namespace std;long long a[110][110], f[110][110][2510];long long n, m, p;int main() { freopen("count.in", "r", stdin); freopen("count.out", "w", stdout); cin >> n >> m >> p; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { cin >> a[i][j]; } } f[1][1][a[1][1]] = 1; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { for (long long w = a[i][j]; w <= p; w++) { f[i][j][w] = (f[i][j][w] + f[i-1][j][w - a[i][j]] + f[i][j-1][w - a[i][j]]) % (10^8 + 7); } } } cout << endl; return 0;}

    代码解释

  • 输入处理:读取输入值n, m, p和网格中的每个单元格的花费a[i][j]。
  • 初始化:起点的花费为1。
  • 动态规划表计算:遍历每个单元格(i, j),计算所有可能的花费w。每一步都使用动态转移方程更新f[i][j][w]。
  • 输出:输出结果,通常用于单元格(n, m)的最小花费。
  • 这段代码通过动态规划有效地解决了问题,确保了在处理大规模数据时的高效性,同时通过取模操作防止了数值溢出。

    转载地址:http://tsle.baihongyu.com/

    你可能感兴趣的文章
    MySQL中auto_increment有什么作用?(IT枫斗者)
    查看>>
    MySQL中B+Tree索引原理
    查看>>
    mysql中cast() 和convert()的用法讲解
    查看>>
    mysql中datetime与timestamp类型有什么区别
    查看>>
    MySQL中DQL语言的执行顺序
    查看>>
    mysql中floor函数的作用是什么?
    查看>>
    MySQL中group by 与 order by 一起使用排序问题
    查看>>
    mysql中having的用法
    查看>>
    MySQL中interactive_timeout和wait_timeout的区别
    查看>>
    mysql中int、bigint、smallint 和 tinyint的区别、char和varchar的区别详细介绍
    查看>>
    mysql中json_extract的使用方法
    查看>>
    mysql中json_extract的使用方法
    查看>>
    mysql中kill掉所有锁表的进程
    查看>>
    mysql中like % %模糊查询
    查看>>
    MySql中mvcc学习记录
    查看>>
    mysql中null和空字符串的区别与问题!
    查看>>
    MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入
    查看>>
    MYSQL中TINYINT的取值范围
    查看>>
    MySQL中UPDATE语句的神奇技巧,让你操作数据库如虎添翼!
    查看>>
    Mysql中varchar类型数字排序不对踩坑记录
    查看>>