日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

洛谷 P3041 [USACO12JAN] Video Game Combos

發(fā)布時(shí)間:2023/12/29 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 洛谷 P3041 [USACO12JAN] Video Game Combos 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目描述

Bessie is playing a video game! In the game, the three letters 'A', 'B', and 'C' are the only valid buttons. Bessie may press the buttons in any order she likes; however, there are only N distinct combos possible (1 <= N <= 20). Combo i is represented as a string S_i which has a length between 1 and 15 and contains only the letters 'A', 'B', and 'C'.

Whenever Bessie presses a combination of letters that matches with a combo, she gets one point for the combo. Combos may overlap with each other or even finish at the same time! For example if N = 3 and the three possible combos are "ABA", "CB", and "ABACB", and Bessie presses "ABACB", she will end with 3 points. Bessie may score points for a single combo more than once.

Bessie of course wants to earn points as quickly as possible. If she presses exactly K buttons (1 <= K <= 1,000), what is the maximum number of points she can earn?

貝西在玩一款游戲,該游戲只有三個(gè)技能鍵 “A”“B”“C”可用,但這些鍵可用形成N種(1 <= N<= 20)特定的組合技。第i個(gè)組合技用一個(gè)長度為1到15的字符串S_i表示。

當(dāng)貝西輸入的一個(gè)字符序列和一個(gè)組合技匹配的時(shí)候,他將獲得1分。特殊的,他輸入的一個(gè)字符序列有可能同時(shí)和若干個(gè)組合技匹配,比如N=3時(shí),3種組合技分別為"ABA", "CB", 和"ABACB",若貝西輸入"ABACB",他將獲得3分。

若貝西輸入恰好K (1 <= K <= 1,000)個(gè)字符,他最多能獲得多少分?

輸入輸出格式

輸入格式:

?

  • Line 1: Two space-separated integers: N and K.

  • Lines 2..N+1: Line i+1 contains only the string S_i, representing combo i.

?

輸出格式:

?

  • Line 1: A single integer, the maximum number of points Bessie can obtain.

?

輸入輸出樣例

輸入樣例#1:?
3 7
ABA
CB
ABACB 輸出樣例#1:?
4


說明

The optimal sequence of buttons in this case is ABACBCB, which gives 4 points--1 from ABA, 1 from ABACB, and 2 from CB.


最簡單的AC自動(dòng)機(jī)+DP了。。。。再不會(huì)的話AC自動(dòng)機(jī)白學(xué)了。

#include<bits/stdc++.h> #define ll long long #define maxn 1005 using namespace std; int ch[maxn][3],n,m,k,ans=0; int root=0,tot=0,val[maxn]; int f[maxn],g[maxn][maxn]; char s[maxn];inline int id(char c){return c-'A'; }inline void ins(){int len=strlen(s),now=root;for(int i=0;i<len;i++){int c=id(s[i]);if(!ch[now][c]) ch[now][c]=++tot;now=ch[now][c];}val[now]=1; }inline void get_fail(){queue<int> q;for(int i=0;i<3;i++) if(ch[0][i]){q.push(ch[0][i]);}int r,v,x;while(!q.empty()){x=q.front(),q.pop();for(int i=0;i<3;i++){r=ch[x][i];if(!r){ch[x][i]=ch[f[x]][i];continue;}q.push(r);f[r]=ch[f[x]][i];val[r]+=val[f[r]];}} }inline void dp(){memset(g,-0x3f,sizeof(g));g[0][0]=0;int to;for(int i=0;i<k;i++)for(int j=0;j<=tot;j++)for(int u=0;u<3;u++){to=ch[j][u];g[i+1][to]=max(g[i+1][to],g[i][j]+val[to]);}for(int i=0;i<=tot;i++) ans=max(ans,g[k][i]); }int main(){scanf("%d%d",&n,&k);for(int i=1;i<=n;i++){scanf("%s",s);ins();}get_fail();dp();printf("%d\n",ans);return 0; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/JYYHH/p/8280569.html

總結(jié)

以上是生活随笔為你收集整理的洛谷 P3041 [USACO12JAN] Video Game Combos的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。