洛谷 P1026 [NOIP2001 提高组] 统计单词个数

2023-11-16

题目描述
给出一个长度不超过 200 的由小写英文字母组成的字母串(该字串以每行 20 个字母的方式输入,且保证每行一定为 20 个)。要求将此字母串分成 k 份,且每份中包含的单词个数加起来总数最大。

每份中包含的单词可以部分重叠。当选用一个单词之后,其第一个字母不能再用。例如字符串 this 中可包含 this 和 is,选用 this 之后就不能包含 th。

单词在给出的一个不超过 6 个单词的字典中。

要求输出最大的个数。

输入格式
每组的第一行有两个正整数 p,k。 p 表示字串的行数,k 表示分为 k 个部分。

接下来的 p 行,每行均有 20 个字符。

再接下来有一个正整数 s,表示字典中单词个数。 接下来的 s 行,每行均有一个单词。

输出格式
1个整数,分别对应每组测试数据的相应结果。

在这里插入图片描述
思路:dp。我们用dp[i][j]表示字符串i位置分成j块所包含的单词数量,那么,状态转移方程为:dp[i][j] = dp[u][j-1]+sum[u+1][i]。其中u为小于i的断点,sum[i][j]表示i位置到j位置包含的单词数量。我们可以先预处理出来。根据题意,在处理sum的时候我们可以倒序处理。

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int p = sc.nextInt();
        int k = sc.nextInt();
        String str = "";
        for(int i=0;i<p;i++){
            String t = sc.next();
            str += t;
        }
        int len = str.length();
        int s = sc.nextInt();
        String[] arr = new String[s+5];
        for(int i=0;i<s;i++) arr[i] = sc.next();
        int[][]dp = new int[300][50];//dp[i][j]表示i位置分成j块所包含的最大单词数量 dp[i][j] = dp[u][j-1] + sum[u+1][i]
        int[][] sum = new int[300][300]; //sum[i][j]表示i到j包含的单词数量
        for(int i=len-1;i>=0;i--){
            for(int j=i;j>=0;j--){
                sum[j][i] = sum[j+1][i];
                String temp = str.substring(j,i+1);
                for(int q=0;q<s;q++){
                    if(temp.indexOf(arr[q])==0){
                        sum[j][i]++;
                        break;
                    }
                }
            }
        }
        for(int i=0;i<len;i++){
            dp[i][1] = sum[0][i];
            for(int u=0;u<i;u++)
            for(int j=2;j<=k&&j<=u+1;j++){
                dp[i][j] = Math.max(dp[i][j],dp[u][j-1]+sum[u+1][i]);
            }
        }
        System.out.println(dp[len-1][k]);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

洛谷 P1026 [NOIP2001 提高组] 统计单词个数 的相关文章

  • linux内核安装编译

    Linux内核下载及编译 下载Linux内核 可以从官网下载linux内核 也可以通过第三方网站进行下载 官网网址 https www kernel org 由于官网可能存在被墙的原因 所以下在很慢 这里也提供一个更加便捷的下载地址 htt
  • 爬虫小练手

    目录 一 简介 了解爬虫 二 网络协议 2 1 http协议 2 2 https协议 三 入门案例 3 1 爬取搜狗首页的页面数据 3 2 爬取搜狗指定词条对应的搜索结果页面 简易网页采集器 3 3 破解百度翻译 获取想要的翻译结果 3 4

随机推荐

  • Windows10家庭版添加组策略编辑器

    1 新建批处理文件test bat 内容如下 echo off pushd dp0 dir b SystemRoot servicing Packages Microsoft Windows GroupPolicy ClientExtens
  • Unity实战(1):Unity点击按钮,打印按钮文字内容

    目录 前言 一 准备工作 1 在场景中新建一个按钮 这里使用的是Button TextMeshPro 如果没有需要更新UNITY版本 2 将Button的文字内容在这里改为123456以便测试 新建好以后默认的内容是Button 3 新建一
  • c++学习

    7 指针 7 1 指针的基本概念 作用 可以通过指针间接访问内存 指针是用来记录内存地址编号的 指针就是一个地址 1 定义指针 语法 数据类型 指针变量名 int a 10 int p p a 或者int p a cout lt lt a的
  • PTA 基础编程题目集 7-27 冒泡法排序 C语言

    PTA 基础编程题目集 7 27 冒泡法排序 C语言 将N个整数按从小到大排序的冒泡排序法是这样工作的 从头到尾比较相邻两个元素 如果前面的元素大于其紧随的后面元素 则交换它们 通过一遍扫描 则最后一个元素必定是最大的元素 然后用同样的方法
  • Nacos配置文件 Param ‘serviceName‘ is illegal, serviceName is blank

    今天学习NACOS配置文件时 报错Param serviceName is illegal serviceName is blank 但是我在bootstrap yml文件中配置了服务名 父工程引入的依赖版本为最新的2021 1
  • AndroidStudio将module变为library

    文章注明出处可随意转载 请尊重别人的劳动成果 前言 在一个application当中 可能会存在多个module 有时也会有一个module包含其他module的需求 在完成这个需求时 Google了很多 全是2014年之前的一些老文章 现
  • Gateway配合sentinel自定义限流_Spring Cloud Gateway 扩展支持动态限流

    之前分享过 一篇 限流实现 核心是依赖Spring Cloud Gateway 默认提供的限流过滤器来实现 原生RequestRateLimiter 的不足 配置方式 RequestRateLimiterGatewayFilterFacto
  • react+ts+vite从0搭建项目

    一 创建项目 1 创建一个基础项目 npm create vite latest 项目名 template react ts eg 输入命令后需要回答几个问题 按照自己需求选择即可 此处选择react ts 2 格式化代码的配置 a vsc
  • 京东、阿里、小米IoT平台设备接入对比分析

    概述 京东 阿里 小米都在积极布局物联网 智能家居方向 经过几年的运营和积累 各家平台接入了不同产品 形成了各自的发展模式 本报告从平台设备的视角 通过分析各平台设备接入情况 对比已接入的设备品类 摸清平台的布局 分析各平台优劣势 为物联网
  • 车载以太网工具链

    一 什么是车载以太网 随着近年汽车电子的快速发展 车内ECU数量的持续增加 带宽需求也随之不断增长 对此 汽车制造商的电子系统 线束系统等成本也在提高 而相比于传统总线技术 车载以太网不仅可以满足汽车制造商对带宽的需求 同时还能降低车内的网
  • 2.树莓派上程序自启动方式总结(带桌面)

    在树莓派上设置程序上电自动启动的几种方法 1 在pi config中新建autostart文件夹 在下面新建 desktop后缀的文件 具体方式问度娘 忘了 2 在pi文件夹下 修改 bashrc和 profile文件 比如直接运行py文件
  • 图像基本变换---图像二值化(包含OSTU/迭代法/统计法/双峰法/P分位法/最大熵法)

    OSTU法图像二值化 算法说明 Ostu法又叫做最大类间方差法 是一种常用的图像分割算法 基本算法思想是根据初始阈值把图像分为两类 然后计算两类之间的方差 更新阈值 重新计算类间方差 当满足类间方差最大时的阈值 即为所求最佳阈值 具体过程如
  • mybatis中关于example类详解mybatis的Example[Criteria]的使用

    一 什么是example类 mybatis generator会为每个字段产生如上的Criterion 如果表的字段比较多 产生的Example类会十分庞大 理论上通过example类可以构造你想到的任何筛选条件 在mybatis gene
  • 基于Pygame框架的交通导流可视化模拟

    目录标题 项目介绍 项目要求 关键技术 项目核心功能 代码 参考资料 源码下载地址 https download csdn net download david2000999 85627883 项目介绍 本项目根据以下项目要求完成的一个py
  • 软件测试大总结

    目录 一 基本内容 二 软件开发的五大模型 1 瀑布模型 2 螺旋模型 3 增量模型 4 迭代模型 5 敏捷模型 三 敏捷模型中的模型 1 V模型 2 W模型 四 测试用例的设计方法 五 测试分类 1 按测试对象划分 2 按照是否可以查看代
  • 【MySQL索引】提高查询速度和效率

    1 认识索引 假设现在大家要去 MySQL 书中找索引的内容 大家应该不会拿着 MySQL 的书一张一张去找 而是会看MySQL 书的目录 然后通过目录找到索引对应的页码 再去对应的页码中查看索引的内容 索引的优点 索引就相当于书的目录 运
  • 命令行操作MySQL - 调整列的完整性约束

    这是命令行操作MySQL数据库系列博客的第十一篇 今天这篇博客记录如何 调整列的完整性约束 调整 主键 外键 非空 唯一 自增长和默认值约束 一 主键PK 外键FK和 唯一键UK 查询键的别名 show index 或 keys from
  • 关系型数据库连接表的几种方式

    一 SQL 左外连接 右外连接 全连接 内连接 内连接 a表 id name 1 张3 2 李四 3 王武 b表 id job parent id 1 23 1 2 34 2 3 34 4 a id同parent id 存在关系 内连接 i
  • 设置最小值_allegro软件的绝对传输延迟是什么,绝对传输延迟应该怎么设置呢...

    标题 allegro软件的绝对传输延迟是什么 绝对传输延迟应该怎么设置呢 我们在用allegro进行PCB设计完成以后 都需要对一组传输的总线进行时序等长 在做时序等长的时候 分为绝对传输延迟与相对传输延迟 绝对传输延迟 顾名思义 信号传输
  • 洛谷 P1026 [NOIP2001 提高组] 统计单词个数

    题目描述 给出一个长度不超过 200 的由小写英文字母组成的字母串 该字串以每行 20 个字母的方式输入 且保证每行一定为 20 个 要求将此字母串分成 k 份 且每份中包含的单词个数加起来总数最大 每份中包含的单词可以部分重叠 当选用一个