牛客小白月赛21 I题

I love you

题目描述

此时相望不相闻,愿逐月华流照君。
一纸情书,到底蕴含了多少倍的爱情呢?
I love you, not only for what you are, but for what I am when I am with you.

输入描述:

共一行:一封若干个字符的情书(大小写不敏感)。
情书不会超过684594个字符(大写、小写字母)。

输出描述:

共一行:包含一个整数,即iloveyou在情书中作为子序列出现的次数。
由于答案可能很大,请输出对20010905取模后的值。


一道线性dp题;

dp[i][j]表示第i个字母匹配到了前j个字母的种类数;

状态转移方程:dp[i][j]=dp[i-1][j]+(s[i]==‘目标字符’)*dp[i-1][j-1];

最近写dp一点感觉都没有,可能是很久没写了吧;

#include<bits/stdc++.h>
#define LL long long
#define pa pair<int,int>
#define lson k<<1
#define rson k<<1|1
#define inf 0x3f3f3f3f
//ios::sync_with_stdio(false);
using namespace std;
const int N=200100;
const int M=1000100;
const LL mod=20010905;
LL dp[700000][10];
char s[700000];
int main(){
//	ios::sync_with_stdio(false);
	scanf("%s",s+1);
	for(int i=1;s[i]!='\0';i++){
		dp[i][1]=(dp[i-1][1]+(s[i]=='I'||s[i]=='i'))%mod;
		dp[i][2]=(dp[i-1][2]+(s[i]=='l'||s[i]=='L')*dp[i-1][1])%mod;
		dp[i][3]=(dp[i-1][3]+(s[i]=='o'||s[i]=='O')*dp[i-1][2])%mod;
		dp[i][4]=(dp[i-1][4]+(s[i]=='v'||s[i]=='V')*dp[i-1][3])%mod;
		dp[i][5]=(dp[i-1][5]+(s[i]=='e'||s[i]=='E')*dp[i-1][4])%mod;
		dp[i][6]=(dp[i-1][6]+(s[i]=='y'||s[i]=='Y')*dp[i-1][5])%mod;
		dp[i][7]=(dp[i-1][7]+(s[i]=='o'||s[i]=='O')*dp[i-1][6])%mod;
		dp[i][8]=(dp[i-1][8]+(s[i]=='u'||s[i]=='U')*dp[i-1][7])%mod;
	}
	cout<<dp[strlen(s+1)][8]<<endl;
	return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值