## 选择题略## 编程题### T1 最大美观度(100%)三种情况,一个格子、两个格子、三个或以上格子,时间复杂度O(1)### T2 字符消除(100%)考虑记忆化搜索代替dp,先是挨着删除,比如abcdef,删除ab,求cdef,删除cd,求abef。这样过27%,因为重复太多,比如ab删除了,后面求cdef又删除cd,和第一次循环删除cd效果相同。考虑不可逆的记忆化,删除第一个字符和其他(1+2i)位置的字符,保证子串是偶数,AC。#pragma GCC optimize(3)#include<iostream>#include<bits/stdc++.h>using namespace std;typedef long long ll;unordered_map<string, ll> mp;int a[27][27];int n, k;string s;ll dfs(string str){ string key = str; if(str == &quot;&quot;) return 0; if(mp.find(key) != mp.end()) return mp[key]; ll res = 0; for(int i = 1; i < str.size()-1; i+=2) res = max(res, dfs(str.substr(1, i) + str.substr(i + 1)) + a[(str[0] - 'a')][(str[i] - 'a')]); return mp[key] = res;}int main(){ cin >> n >> k; for(int i = 0; i < k; i++) for(int j = 0; j < k; j++) cin >> a[i][j]; cin >> s; dfs(s); cout << mp[s]; return 0;}