首页 > 其他分享 >Codeforces Dp

Codeforces Dp

时间:2023-04-18 21:24:23浏览次数:49  
标签:std int Codeforces ++ vector ndp inf Dp

Zero Remainder Sum

  采用辅助数组 $ ndp[m + 1][\frac{m}{2}][k] $ 来求出每一行中在当前第 $ i $ 列,取了 $ j $ 个物品,总和模 $ k $ 的余数是 $ t $ 的最大和是多少。用 $ dp[n + 1][k] $ 来转移每一行的状态。

  #include <bits/stdc++.h>

  using namespace std;

  const int inf = std::numeric_limits<int>::max() / 2;

  signed main() {
    std::cin.tie(nullptr)->sync_with_stdio(false);

    int n, m, k;
    std::cin >> n >> m >> k;
    std::vector<std::vector<int>> a(n, std::vector<int>(m));

    for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) std::cin >> a[i][j];
    std::vector<std::vector<int>> dp(n + 1, std::vector<int>(k, -inf));
    
    dp[0][0] = 0;
    for (int i = 0; i < n; i++) {
      std::vector<std::vector<std::vector<int>>> ndp(m + 1, std::vector<std::vector<int>>(m / 2 + 1, std::vector<int>(k, -inf)));
      ndp[0][0][0] = 0;
      for (int j = 0; j < m; j++) {
        ndp[j + 1] = ndp[j];
        for (int p = 0; p < m / 2; p++) {
          for (int q = 0; q < k; q++) {
            ndp[j + 1][p + 1][(q + a[i][j]) % k] = std::max(ndp[j + 1][p + 1][(q + a[i][j]) % k], ndp[j][p][q] + a[i][j]);
          }
        }
      }

      std::vector<int> Max(k, -inf);
      for (int j = 0; j < k; j++) {
        for (int p = 0; p <= m / 2; p++) {
          Max[j] = std::max(Max[j], ndp[m][p][j]);
        }
      }

      for (int j = 0; j < k; j++) {
        for (int p = 0; p < k; p++) {
          dp[i + 1][(j + p) % k] = std::max(dp[i + 1][(j + p) % k], dp[i][j] + Max[p]);
        }
      }
    }

    std::cout << dp[n][0] << "\n";

  }

标签:std,int,Codeforces,++,vector,ndp,inf,Dp
From: https://www.cnblogs.com/Haven-/p/17331152.html

相关文章

  • Codeforces 1810G - The Maximum Prefix(DP)
    挺小清新的一道计数题。首先先分析下这个“最大前缀和”,按照最朴素的思路就是扫一遍每个前缀,然后记录一下当前的\(sum\)与前面的\(mx\),但是如果你一直陷在这个思路上你就似了,因为按照这个思路做,你DP状态里需要记录\(sum\)和\(mx\)两个维度,算上下标一维总共是\(n^3\),并......
  • udp报文
    1、介绍udp,userdatagramprotocol用户数据报协议,属于传输层协议。上层是dns等应用层协议,下层是ip协议。2、结构(1)源端口号,2字节(2)目标端口号,2字节(3)总长度,2字节,单位是字节(4)校验值,2字节,保证数据安全3、wireshark ......
  • SQL Server Endpoint 与 镜像、AlwaysOn身份验证
    若要加入 AlwaysOn可用性组 或数据库镜像,服务器实例上必须创建自己专用的“数据库镜像端点”(databasemirroringendpoint)。 此端点用途特殊,专门用于接收来自其他实例的连接。数据库镜像端点使用TCP协议在参与数据库镜像会话或承载可用性副本的实例之间发送和接收消息。 数......
  • NDP常用报文格式
    邻居发现协议(NeighborDiscoveryProtocol,NDP)是IPv6协议体系中最重要的基础协议之一,很多IPv6功能都依赖NDP来实现。一般说来,NDP可以实现的功能包括:替代IPv4的ARP来形成邻居表;默认网关的自动获取;无状态地址自动配置;路由重定向等。NDP定义了5类ICMPv6报文,即路由器请求(RouterSolicito......
  • Codeforces Round 625 (Div. 1, based on Technocup 2020 Final Round) A. Journey Pl
    https://codeforces.com/contest/1320/problem/AA.JourneyPlanning题目大意:给定一组数,问我们ai-aj==i-j的时候就可以把ai的值加起来,问我们可以凑到的最大总值是多少?input6107191015output26input1400000output400000input7892611122914out......
  • Codeforces Round 866 (Div. 2) ABC
    https://codeforces.com/contest/1820A.Yura'sNewName题目大意:给定一个字符串,每次这个表情^^或者这个表情^_^就是合法的问我们这个字符串至少要添加多少东西使得怎么看都是合法的?input7^______^___^_^^^_^___^^_^^_^^^^^_^_^^___^^_output5511032#......
  • 停用flash的rtmfp 【禁止flash的udp上传】
    以XP为例,找到C:\WINDOWS\system32\Macromed\Flash\mms.cfg。当然你也可以直接搜索mms.cfg 在里面添加这段红色字体。  RTMFPP2PDisable=1  意味关闭flash的rtmfp。如果没有,可以手动添加。也可以新建bat文件,复制以下代码。1.echoon2.pause3.echoRTMFPP2PDisable=......
  • m规则LDPC和非规则LDPC误码率matlab对比仿真,并对比不同译码迭代次数的误码率
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要LDPC码是麻省理工学院RobertGallager于1963年在博士论文中提出的一种具有稀疏校验矩阵的分组纠错码。几乎适用于所有的信道,因此成为编码界近年来的研究热点。它的性能逼近香农极限,且描述和实现简单,易于进行理论......
  • 套接字编程 socket udp 课本练习
    #-*-coding:utf-8-*-"""CreatedonMonApr1719:11:302023@author:LittleYellowFlower"""fromsocketimport*serverPort=12000serverSocket=socket(AF_INET,SOCK_DGRAM)serverSocket.bind(('',serverPort))......
  • MidpointLine
    #include<graphics.h>#include<math.h>voidMidpointLine(intx0,inty0,intx1,inty1);intmain(void){intgdriver=DETECT,gmode,errorcode;intbkcolor,midx,midy;initgraph(&gdriver,&gmode......