博客
关于我
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/

    你可能感兴趣的文章
    nginx配置域名和ip同时访问、开放多端口
    查看>>
    Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
    查看>>
    Nginx配置如何一键生成
    查看>>
    Nginx配置实例-负载均衡实例:平均访问多台服务器
    查看>>
    Nginx配置文件nginx.conf中文详解(总结)
    查看>>
    Nginx配置负载均衡到后台网关集群
    查看>>
    ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
    查看>>
    NHibernate学习[1]
    查看>>
    NHibernate异常:No persister for的解决办法
    查看>>
    NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
    查看>>
    NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表或全表增量同步_实现指定整库同步_或指定数据表同步配置_04---大数据之Nifi工作笔记0056
    查看>>
    NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
    查看>>
    NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
    查看>>