各种板子
2026-06-06 12:03:33
发布于:江苏

我的团队
后缀表达式值
#include<iostream>
#include<stack>
int main(){
std::string s;
std::cin>>s;
std::stack<int> stk;
int n=s.size();
for(int i=0;i<n;i++){
if(s[i]>='0'&&s[i]<='9'){
stk.push(s[i]-'0');
}
else{
if(s[i]=='+'){
int a,b;
a=stk.top();
stk.pop();
b=stk.top();
stk.pop();
stk.push(a+b);
}
else if(s[i]=='-'){
int a,b;
b=stk.top();
stk.pop();
a=stk.top();
stk.pop();
stk.push(a-b);
}
else if(s[i]=='*'){
int a,b;
a=stk.top();
stk.pop();
b=stk.top();
stk.pop();
stk.push(a*b);
}
else if(s[i]=='/'){
int a,b;
b=stk.top();
stk.pop();
a=stk.top();
stk.pop();
stk.push(a/b);
}
}
}
std::cout<<stk.top();
}
}
k进制转10进制
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
int k;
string s;
cin>>k>>s;
for(long long i=s.length()-1,j=1;i>=0;i--,j*=k){
int t;
if(s[i]>='A'){
t=s[i]-'A'+10;
}
else {
t=s[i]-'0';
}
sum+=t*j;
}
cout<<sum<<endl;
}
}
最长公共上升子序列
#include <iostream>
#include <cstring>
using namespace std;
int a[3010],b[3010];
int f[3010][3010];
int main() {
int n;
cin >> n;
for (int j=1; j<=n; j++) { cin >> b[j]; }
for (int i=1; i<=n; i++) { cin >> a[i]; }
memset(f, 0, sizeof f);
int ans = -1;
for(int i=1;i<=n;i++){
int ret = 0;
for (int j=1; j<=n; j++) {
if (a[i] > b[j]) {
ret = max(ret, f[i-1][j]);
}
else if (a[i] == b[j]) {
f[i][j] = ret + 1;
}
f[i][j] = max(f[i][j], f[i-1][j]);
ans = max(f[i][j], ans);
}
}
cout<<ans<<endl;
return 0;
}
最长上升子序列
#include<bits/stdc++.h>
using namespace std;
int a[1005],dp[1005],n;
// dp[i]到第i个位置时,选与不选第i个数 的最长上升序列的长度
// 都是要 在i之前(1~i-1) 区间 打擂台
int main(){
cin>>n;
int ans=0; //用于记录答案
for(int i=1;i<=n;i++){
cin>>a[i];
// 由于只和前面状态有关,所以可以一边输入一边处理
int mx=0;
for(int j=1;j<i;j++){
if(a[j]<a[i]){ // 在前方找出数值比他小 ,但长度要打擂台求最大
mx = max(dp[j],mx);// 比a[i]小的值,打擂台求以j为结尾的最长上升序列的长度
}
}
dp[i]=mx+1;// 将第i个数 拼在 那个数后面 长度+1
// 求出了以第 i位置为结尾的最大长度
ans=max(ans,dp[i]); // 在所有的以i为结尾的后面
}
cout<<ans;
return 0;
}
最长上升子序列(连续)
#include<iostream>
using namespace std;
const int M=1009;
int a[M],dp[M];
int n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
dp[1]=1;
int ans=-1e9;
for(int i=2;i<=n;i++){
if(a[i]>a[i-1]){
dp[i]=dp[i-1]+1;
}
else dp[i]=1;
ans=max(dp[i],ans);
}
cout<<ans;
}
最大子段和
#include<iostream>
using namespace std;
long long a[10000],dp[10000];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
dp[i]=max(dp[i-1]+a[i],a[i]);
}
long long t=-1e9;
for(int i=1;i<=n;i++){
t=max(dp[i],t);
}
cout<<t;
}
全部评论 6
h
1周前 来自 江苏
0h
1周前 来自 江苏
0h
1周前 来自 江苏
0h
1周前 来自 江苏
0h
1周前 来自 江苏
0h
1周前 来自 江苏
0
















有帮助,赞一个