結果
| 問題 | No.1512 作文 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-08-12 18:25:32 |
| 言語 | C++23(gcc16) (gcc 16.1.0 + boost 1.90.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,356 bytes |
| 記録 | |
| コンパイル時間 | 3,349 ms |
| コンパイル使用メモリ | 173,480 KB |
| 実行使用メモリ | 5,888 KB |
| 最終ジャッジ日時 | 2026-08-12 18:25:43 |
| 合計ジャッジ時間 | 5,460 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 21 WA * 17 |
ソースコード
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int char_to_int(char c){
return int(c)-96;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
//好像就是最多不交区间,贪心
//不对,这个要求长度长,而不是串多,那应该是区间dp
int n;
string s;
int dp[27][27];
for(int i=1;i<=26;i++){
for(int j=1;j<=26;j++){
dp[i][j]=0;
}
}
cin>>n;
for(int i=0;i<n;i++){
bool flag=true;
cin>>s;
for(int j=1;j<s.size();j++){ //O(|S|)
if(int(s[j])<int(s[j-1])){
int flag=false;
break;
}
}
int h=char_to_int(s[0]);int t=char_to_int(s[s.size()-1]);
if(flag&&h<t) dp[h][t]=max(int(s.size()),dp[h][t]);
else if(flag&&h==t) dp[h][t]+=s.size();
}
int rst=0;
for(int len=1;len<=25;len++){
for(int i=1;i<=26-len;i++){
dp[i][i+len]+=dp[i][i];
dp[i][i+len]+=dp[i+len][i+len]; //所有都自己加上前后缀
for(int k=1;k<=len-1;k++){
dp[i][i+len]=max(dp[i][i+k]+dp[i+k][i+len]-dp[i+k][i+k], dp[i][i+len]); //中间被用两次
rst=max(dp[i][i+len],rst);
}
}
}
cout<<rst<<endl;
return 0;
}