(仅仅记录一下)
1.模拟栈
#include<bits/stdc++.h>
using namespace std;
string h1,h2,h3;
char temp;
int len1,len2;
stack<char>ss;
int main()
{
cin>>h1>>h2;
len1=h1.length();
len2=h2.length();
h3="";
if(len1!=len2)
printf("-1\n");
else{
for(int i=len1-1, j=0; i>=0 && j<len2 ; ){
temp=h2[j];
ss.push(h1[i]);
h3+="E";
while(!ss.empty()&& temp==ss.top() ){
h3+="D";
ss.pop();///出栈
j++;///往下走
temp=h2[j];
if(i<0 || j>=len2)
break;
}
i--;
}
if(ss.empty()){
cout<<h3<<endl;
}
else
cout<<"-1"<<endl;
}
}
2.优雅暴力
3
3 1 2 3
4 1 2 3 4
4 1 2 3 5
输出:3
3
2 1 3
3 2 6 4
4 1 2 5 7
输出:2
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int mp[200][20000];
map<LL,LL>flag;
map<LL,LL>xpp[200];
int main()
{
int t,n,sum,x;
int num=0;
scanf("%d",&t);
int maxx=1;
while(t--){
sum=0;
num++;///第几组
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&x);
sum+=x;
mp[num][i]=x;
}
xpp[num][sum]=1;
flag[sum]++;
for(int i=1;i<=n;i++){
if(xpp[num][sum-mp[num][i]]==0)
{
flag[sum-mp[num][i]]++;
xpp[num][sum-mp[num][i]]=1;
}
if(flag[sum-mp[num][i]]>maxx)
maxx=flag[sum-mp[num][i]];
/// cout<<"num:"<<num<<" :"<<sum-mp[num][i]<<endl;
}
}
printf("%d\n",maxx);
}
3.数位dp。待补。
题目链接:
https://blog.csdn.net/weixin_40124642/article/details/104567788