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

    你可能感兴趣的文章
    Nmap端口扫描工具Windows安装和命令大全(非常详细)零基础入门到精通,收藏这篇就够了
    查看>>
    NMAP网络扫描工具的安装与使用
    查看>>
    NMF(非负矩阵分解)
    查看>>
    nmon_x86_64_centos7工具如何使用
    查看>>
    NN&DL4.1 Deep L-layer neural network简介
    查看>>
    NN&DL4.3 Getting your matrix dimensions right
    查看>>
    NN&DL4.7 Parameters vs Hyperparameters
    查看>>
    NN&DL4.8 What does this have to do with the brain?
    查看>>
    nnU-Net 终极指南
    查看>>
    No 'Access-Control-Allow-Origin' header is present on the requested resource.
    查看>>
    NO 157 去掉禅道访问地址中的zentao
    查看>>
    no available service ‘default‘ found, please make sure registry config corre seata
    查看>>
    No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
    查看>>
    no connection could be made because the target machine actively refused it.问题解决
    查看>>
    No Datastore Session bound to thread, and configuration does not allow creation of non-transactional
    查看>>
    No fallbackFactory instance of type class com.ruoyi---SpringCloud Alibaba_若依微服务框架改造---工作笔记005
    查看>>
    No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalanc
    查看>>
    No mapping found for HTTP request with URI [/...] in DispatcherServlet with name ...的解决方法
    查看>>
    No mapping found for HTTP request with URI [/logout.do] in DispatcherServlet with name 'springmvc'
    查看>>
    No module named 'crispy_forms'等使用pycharm开发
    查看>>