首页 > 其他分享 >[atcoder 358] 【动态规划】

[atcoder 358] 【动态规划】

时间:2024-06-15 22:21:58浏览次数:24  
标签:atcoder java int static io import 动态 dp 358

  • dp[i][j] 表示前i个和为j的个数。那么就有递推式dp[i][j] += dp[i][j-x] * c(j,j-x); 其中x满足从0到c[i],并且x满足<=j

  • 组合数递推公式c(n,k) = c(n,k-1) + c(n,k);


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class Main {
  public static void main(String[] args) throws IOException {
    int k = rd.nextInt();
    int[] c = new int[26];
    List<Integer> list = new ArrayList<>();
    for (int i = 0; i < 26; i++) {
      c[i] = rd.nextInt();
      if (c[i] != 0) {
        list.add(c[i]);
      }
    }
    System.out.println(countEquations(c, k));
  }

  static long mod = 998244353;

  public static int countEquations(int[] c, int k) {
    countNonNegativeSolutions();
    int n = c.length;
    int[][] dp = new int[n + 1][k + 1];

    dp[0][0] = 1;

    for (int i = 1; i <= n; i++) {
      for (int j = 0; j <= k; j++) {
        for (int x = 0; x <= c[i - 1] && x <= j; x++) {
          if ( j > x ) {
            dp[i][j] += dp[i - 1][j - x] * dp2[j][j - x] % mod;
          } else {
            dp[i][j] +=  1L;
          }
          dp[i][j] %= mod;
        }
      }
    }

    int totalCount = 0;
    for (int j = 1; j <= k; j++) {
      totalCount += dp[n][j];
      totalCount %= mod;
    }

    return totalCount;
  }

  static long[][] dp2;

  public static void countNonNegativeSolutions() {
    // 初始化动态规划数组
    int MAX = 1001;
    dp2 = new long[MAX+1][MAX+1];

    // 设置初始状态
    dp2[0][0] = 1;
    dp2[1][0] = 1;
    dp2[1][1] = 1;

    for (int n = 2; n <= MAX; n++) {
      dp2[n][0] = 1;
      for (int k = 1; k <= n; k++) {
        dp2[n][k] = dp2[n - 1][k - 1] + dp2[n - 1][k];
        dp2[n][k] %= mod;
      }
    }
  }

  static class rd {
    static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    static StringTokenizer tokenizer = new StringTokenizer("");

    // nextLine()读取字符串
    static String nextLine() throws IOException {
      return reader.readLine();
    }

    // next()读取字符串
    static String next() throws IOException {
      while (!tokenizer.hasMoreTokens()) { tokenizer = new StringTokenizer(reader.readLine()); }
      return tokenizer.nextToken();
    }

    // 读取一个int型数值
    static int nextInt() throws IOException {
      return Integer.parseInt(next());
    }

    // 读取一个double型数值
    static double nextDouble() throws IOException {
      return Double.parseDouble(next());
    }

    // 读取一个long型数值
    static long nextLong() throws IOException {
      return Long.parseLong(next());
    }

    // 读取一个BigInteger
    static BigInteger nextBigInteger() throws IOException {
      BigInteger d = new BigInteger(rd.nextLine());
      return d;
    }
  }
}

标签:atcoder,java,int,static,io,import,动态,dp,358
From: https://www.cnblogs.com/fishcanfly/p/18249843

相关文章

  • ATcoder ABC 358 补题记录(A~D,G)
    A直接模拟即可。#pragmaGCCoptimize(3)#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=1000100,mod=998244353;inta[N];signedmain(){strings,t;cin>>s>>t;if(s=="AtCoder"&&t==&qu......
  • 万能破题方法包(1)动态规划法
    一、前言   动态规划法是一种用于解决多阶段决策问题的优化方法1.1、概念    在动态规划法中,问题被分解为多个阶段,并且每个阶段都有多个可能的选择。动态规划法通过保存中间计算结果,以减少重复计算,从而提高算法的效率。  1.2、解决步骤定义问题的状态:......
  • 模糊逻辑 fuzzylogic 动态避障 路径规划 动态路径规划 模糊逻辑路径规划
    模糊逻辑fuzzylogic动态避障路径规划 动态路径规划模糊逻辑路径规划     ......
  • Vue3动态组件的基本用法
     和Vue2动态组件写法不同的是,:is传递的内容需要先定义,再给:is使用<template><div><component:is="currentComponent"></component></div></template><scriptsetup>importMyComponentfrom'./MyComponent.vue';......
  • 接口自动化设计分享-动态连接数据库
    现在来说,自动化的尽头是平台,尽量的在可视化界面操作用例,执行,管理。但是基础要打牢,面对应需求搭建稳定,易扩展,较全面,能落地的框架不易。最近做新项目,自己在搭建了python接口自动化,如果做到在python+excel的易用接近平台使用也是不错的事情动态连接数据库由于我的测试用例......
  • Gateway内网关的详细使用说明,包含由于版本问题、依赖问题引起的动态路由转发问题的详
    资料的连接官方文档https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/en-us/index.html基本的概念相关属性Route:一个Route由路由ID(用来绑定哪一个微服务),转发URI(转移的目标URL),多个Predicates以及多个Filters构成。Gateway上可以配置多个Rou......
  • B站UP主【动态系统的建模与分析】2_电路系统建模_基尔霍夫定律题目解析
    视频链接选定回路,下面开始求解由图分析所以求导代入得分析过程:式①化简得与,即与的关系式③结合上式结果,化简得与的关系式②化简得的积分与的关系式④代入上式得最终结果......
  • python watchdog检测到文件产生,动态创建进程,不指定进程数去处理,处理过程中需要写文件,
    如果希望在检测到文件时动态创建进程而不预先指定进程数,并确保写文件时不发生冲突,可以使用队列和锁的机制。以下是一个改进的方案:pythonfrommultiprocessingimportProcess,Queue,Lockfromwatchdog.observersimportObserverfromwatchdog.eventsimportFileSystemE......
  • 中电金信:GienTech动态|中标、入选、参会...近期精彩呈现!
    中电金信参编业内首个银行核心系统分级度量标准2024年6月6日,由中国信息通信研究院云计算与大数据研究所主办的“应用现代化赋能银行核心系统升级”交流会议在京召开。会议发布了业内首个银行核心系统分级度量标准《银行核心系统现代化建设水平度量模型》,成立了“应用现代化推进中......
  • python爬虫:实现动态网页的爬取,以爬取视频为例
    引言:爬虫也被称为网络蜘蛛(Spider),是一种自动化的软件程序,能够在互联网上漫游,按照一定的规则和算法抓取数据。爬虫技术广泛应用于搜索引擎、数据挖掘、信息提取等领域,是互联网技术的重要组成部分。摘要:作为爬虫的初学者,网页越简单越好,因为网页的结构越简单,则组织框架更清晰......