自从我一场从青铜打上钻石以后,我好像就打不了黄金场的哭唧唧(/(ㄒoㄒ)/~~),钻石王者场真呆不下去了 被各路神仙吊打
String II

int string2(int k, string s) {
int pre[10005];//我们的差分数组
int ans = 1;//最少的可能就是字串只有一个
for(int i = 0;i < s.size(); ++i) {
int temp = 0;
for(int j = 0;j < s.size(); ++j) {//对第i个字符进行差分操作
pre[j] = abs(s[j]-s[i]);
}
sort(pre,pre+s.size());//对差分的结果排序,我们不在乎字母的位置
int tk = k;
int loc = 0;
for(;loc < s.size(); ++loc)//判断以第i个字母为字串的长度
if(tk - pre[loc] >= 0) {
tk -= pre[loc];
temp++;
}
else
break;
ans = max(ans,temp);//选取最大的
}
return ans;
}
其实这里我们可以优化的,因为字母的个数也就26个,我们不需要把远串所有字母全部枚举,我们只需要枚举原串存在的不同的字母就行,这个时候的时间复杂度大概为\(26nlog(n)\)
Bang! Bang!
\[dp[i][j]=dp[i][j]+dp[i-1][j-k-1] \]
Code:
const int mod = 1e9+7;
long long solve_bangbang(int n, int m, int k) {
// write code here
const int N = 1005;
int dp[N][N];
if(m == 0)//特判一下如果重音符数为0的时候,只有一种方式->就是不变
return 1;
dp[0][0] = 1;
for(int i = 1;i
关注
打赏