DP-统计单词个数

合成孔径雷达Chirp Scaling(CS)算法MATLAB仿真实现 本人也是初学《合成孔径雷达成像算法与实现》,在GitHub上下载的关于CS算法的代码,仔细读了读,发现中间有一些不合理之处,动手改了一改,重新写了一个代码供初学者学习,有什么问题留言即可。 非常感谢源代码的作者,虽然中间有少许不正确的地方,但是对我理解cs算法的帮助非常大,非常感谢!!! 代码中提到的(4.31)这种均是在《合成孔径雷达成像算法与实现》中的公式 以下是MATLAB的仿真程序,直接复... 阅读详情

算法训练 统计单词个数  
时间限制:1.0s   内存限制:256.0MB
锦囊2
每计算每个区间的单词数。 用F[i,j]表示前i个字符分成k份的最大单词数,则F[i,j]=F[u,j-1]+Cnt(u+1,i),其中u
问题描述
  给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个)。要求将此字母串分成k份 (1<k<=40),且每份中包含的单词个数加起来总数最大(每份中包含的单词可以部分重叠。当选用一个单词之后,其第一个字母不能再用。例 如字符串this中可包含this和is,选用this之后就不能包含th)。
  单词在给出的一个不超过6个单词的字典中。
  要求输出最大的个数。
输入格式
  第一行有二个正整数(p,k)
  p表示字串的行数;
  k表示分为k个部分。
  接下来的p行,每行均有20个字符。
  再接下来有一个正整数s,表示字典中单词个数。(1<=s<=6)
  接下来的s行,每行均有一个单词。
输出格式
  每行一个整数,分别对应每组测试数据的相应结果。
样例输入
1 3
thisisabookyouareaoh
4
is
a
ok
sab
样例输出
7
数据规模和约定
  长度不超过200,1<k<=40,字典中的单词数不超过6。


#include <stdio.h>
#include <string.h>
#define InfiniteMin -999999999
int p,k,s;
char str[10][21];
char word[6][16];
int flag[6];
int Cnt[201][201];
int getCnt(int a,int b)
{
    int i,j,m,count=0;
    if(Cnt[a][b]<=0)
    {
        for (i=a;i<=b;i++)
            for (j=0;j<s;j++)
                if(word[j][0]==str[i/20][i%20])
                {
                    for(m=1;word[j][m]!='\0'&&i+m<=b;m++)
                        if(word[j][m]!=str[(i+m)/20][(i+m)%20])
                            break;
                    if(word[j][m]=='\0')
                    {
                        count++;
                        break;
                    }
                }
        Cnt[a][b]=count;
    }
    return Cnt[a][b];
}
int main()
{
    int i,u,K;
    int max,temp;
    int F[201][41];
    scanf("%d%d",&p,&k);
    for(i=0;i<p;i++)
         scanf("%s",str[i]);
    scanf("%d",&s);
    for(i=0;i<s;i++)
        scanf("%s",word[i]);
    for(i=0;i<20*p;i++)
        F[i][1]=getCnt(0,i);
    for(K=2;K<=k;K++)
        for(i=k;i<p*20;i++)
        {
            max=InfiniteMin;
            for(u=K-1;u<=i-1;u++)
            {
                temp=F[u][K-1]+getCnt(u+1,i);
                max=max>temp?max:temp;
            }
            F[i][K]=max;
        }
    printf("%d",F[p*20-1][k]);
    return 0;
}












【swjtu】算法实验2.4分析算法时间复杂度 分析给定算法的时间复杂度。 上机实验,绘制不同输入情况下的运行时间曲线,并与(1)中的分析结果进行比较。 撰写相应的实验报告,实验报告内容包括:实验目的、实验任务、 实验环境、实验步骤、实验结果及其分析以及实验总结等部分内容。 阅读详情

相关推荐

基于加权最小二乘法的电力系统状态估计,通过matlab测试IEEE14和IEEE30测试网络+提供代码操作视频

基于加权最小二乘法的电力系统状态估计,通过matlab测试IEEE14和IEEE30测试网络+提供代码操作视频 运行注意事项:使用matlab2021a或者更高版本测试,运行里面的Runme.m文件,不要直接运行子函数文件。运行时注意matlab左侧的当前文件夹窗口必须是当前工程所在路径。具体可观看提供的操作录像视频跟着操作。

算法训练 统计单词个数

问题描述   给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个)。要求将此字母串分成k份 (1<k<=40),且每份中包含的单词个数加起来总数最大(每份中包含的单词可以部分重叠。当选用一个单词之后,其第一个字母不能再用。 例如字符串this中可包含this和is,选用this之后就不能包含th)。   单词在给出的一个...

ChanCherry的博客 1495

php fread读取文件注意事项

php fread函数用于从文件中读取一定长度的字符,本文章向大家介绍fread读取文件的实例以及使用该函数读取文件需要注意的几个地方,需要的朋友可以参考一下。

matlab:错误使用 fread 文件标识符无效。使用 fopen 生成有效的文件标识符。

fidin:-1.000000 错误使用 fread 文件标识符无效。使用 fopen 生成有效的文件标识符。 出错 convert1 (line 12) A = fread(fidin,inf,'int16'); % 以二进制形式读取文件的全部数据,精度为16位整型 % https://www.xuebuyuan.com/2053299.html % https://blo...

独钓寒江雪 5万+

MATLAB:错误使用 fread,文件标识符无效。使用fopen生成有效的文件标识符。

MATLAB报错现象: 原因:虽然报错是在第七行,但原因是第六行 fopen函数中,路径或者文件名称不对。 方法:此案例中原因是未给出文件后缀,加上后再运行,命令行窗口不再报错。 ...

随喜读书会的博客 4万+

学习小结【1】

在看论文时,自己的一些总结和想法,方便以后自己查阅

809

P1026 统计单词个数 [dp]

P1026 统计单词个数 这道题看上去就是要用dp的样子。裸裸的dp题无误。 首先要把分开的字符串合成那个长度小于等于\(200\)的总字符串。 然后做个预处理,预处理出任意区间内的单词个数,设为\(sum[i][j]\)。 有一个神奇的地方: 当选用一个单词之后,其第一个字母不能再用。 题解里面有这么一种解决方式: 倒序枚举\(j\)和\(i\)。初始化\(sum[i][j] = ...

dianshu0741的博客 171

洛谷 P1026 统计单词个数 dp

洛谷 P1026 统计单词个数 题解: dp[i][j]表示到了第i个位置,分了j块,能得到的最多的单词数。 sum[i][j] 是预处理的表示从i到j的单词数。 转移方程: dp[i][j] = max{ dp[i][j],dp[r][j-1]+sum[r+1][i] } 这里的r表示前1~r个字符被分成j-1份,第r+1到第i个字母单独为1份,加起来就是分成了j份,r是需要被枚举的 代码如下...

化身孤岛的鲸o的博客 400

wikioi-天梯-普及一等-划分dp-1040:统计单词个数

题目描述 Description 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个)。要求将此字母串分成k份(1 单词在给出的一个不超过6个单词的字典中。 要求输出最大的个数。 输入描述 Input Description 第一行为一个正整数(0 每组的第一行有二个正整数(p,k) p表示

Maverick 1281

Luogu_P1026 统计单词个数 DP+string

Luogu_P1026 统计单词个数 ### DP+string 题目链接 题面是个什么玩意 选了this不能选th的原因是t被占用 所以只要避开第一个字母就行 字符串可以用string string的substr(l,len)函数表示把l之后长度为len的字符拿出来 find(x)则是查询字符串x第一次出现的起始位置 那么这个题就比较简单了 先处理出一个数组\(sum[i][j]\)表...

dazhishu2366的博客 260

【NOIP2011】统计单词个数 划分性dp*2

【NOIP2011】统计单词个数dp[i][k] 代表前 i 个字母分成 k 段的最大单词数。 w[i][j] 代表 区间[i,j]的最大单词数。所以,先处理出 w, 再处理 dp。w[i][j] 不能共同前缀, 所以从后往前更新,验证前缀。 w[i][j] = w[i+1][j]+1 (当存在以i开头的单词完全在 [i,j] 内) w[i][j] = w[i+1][j] (other cas

QER 的博客 1131

[luogu]P1026 统计单词个数[DP][字符串]

[luogu]P1026 统计单词个数 题目描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个)。要求将此字母串分成k份(1<k<=40),且每份中包含的单词个数加起来总数最大(每份中包含的单词可以部分重叠。当选用一个单词之后,其第一个字母不能再用。例如字符串this中可包含this和is,选用th...

dejuan4793的博客 123

dp】P1026 统计单词个数

题目描述 给出一个长度不超过200200的由小写英文字母组成的字母串(约定;该字串以每行2020个字母的方式输入,且保证每行一定为2020个)。要求将此字母串分成kk份(1<k \le 401<k≤40),且每份中包含的单词个数加起来总数最大(每份中包含的单词可以部分重叠。当选用一个单词之后,其第一个字母不能再用。例如字符串thisthis中可包含thisthis和isis,选用th...

weixin_30340353的博客 109

【划分型DP统计单词个数

//f[i][j]表示i->j区间有多少符合的单词 //dp[i][j]表示前i个分成j段的最大值 #include #include #include #include using namespace std; int f[210][210], dp[210][210]; int n, p, k, tot, s; string str2[50]; char str[50][5

OranGeC 772

P1026 统计单词个数 区间dp

   题目描述 给出一个长度不超过200200的由小写英文字母组成的字母串(约定;该字串以每行2020个字母的方式输入,且保证每行一定为2020个)。要求将此字母串分成kk份(1<k \le 401<k≤40),且每份中包含的单词个数加起来总数最大(每份中包含的单词可以部分重叠。当选用一个单词之后,其第一个字母不能再用。例如字符串thisthis中可包含thisthis和isis,...

weixin_30375427的博客 98

DP总结】【字符串】【统计单词个数

描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个)。要求将此字母串分成k份(1 单词在给出的一个不超过6个单词的字典中。 要求输出最大的个数。 格式 输入格式 第一行有二个正整数(p,k) p表示字串的行数; k表示分为k个部分。 接下来的p行,每行均有20个字符。 再接下来有

Star_Weeper的博客 713

洛谷P1026 统计单词个数【区间dp

题目:https://www.luogu.org/problemnew/show/P1026 题意: 给定一个字符串,要求把他分成k段。给定s个单词,问划分成k段之后每段中包含的单词和最大是多少。 一个位置作为单词的开头只能计算一次。 思路: 如果仅仅是统计某一个区间内的最大单词数,这比较简单。每次从后往前推一个字符,如果这个字符是一个单词的开头,那么$cnt[i][j] = cnt[i...

weixin_30363817的博客 128

Luogu P1026 统计单词个数___区间dp

题目大意: 给出一个长度不超过200的由小写英文字母组成的字母串。将此字母串分成k份,且每份中包含的单词个数加起来总数最大(每份中包含的单词可以部分重叠。当选用一个单词之后,其第一个字母不能再用)。 回答最大总数。 1&lt;k≤401&lt;k≤401<k≤40,1≤单词个数≤61≤单词个数≤61≤单词个数≤6 分析: 处理出每个区间内的贡献,然后区间dp即可 注意对于一个...

生如夏花之绚烂 246

LuoGu P1026 统计单词个数【区间DP|枚举】

最近做了不少区间DP的问题,他们都有一个共同的特征:比如给出一条直线上的n个坐标表示村庄的位置,然后要在上面建p个邮局,村民优先选择去近的邮局,问所有村庄去邮局的最小距离和是多少,或者将N位数分割成K个因子相乘,求最大乘积,对这些问题,他们都可以归纳为将给定的N个元素分割成K分,求最小/最大,那么我们可以使用如下的dp思想: 将给定的i个元素分割成j份,那么相当于我们找一个break point k, 将前k个元素分成j-1份,然后最后 k+1-i个元素单独为一份,遍历每一个可能的k点,使得结果最大即可。.

csyifanZhang的博客 305
上一篇: 游戏棋-模拟题
下一篇: 贪心-会议中心
XIMO_W
博客等级 码龄15年 10粉丝 47原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值