alg2025/src/8/28/P4342.cpp
Zengtudor 84eee83148 feat(P4342): 实现动态规划算法解决环形表达式问题
添加动态规划表初始化及输入处理逻辑
包括同步IO优化和环形操作符数组处理
2025-08-28 21:23:39 +08:00

67 lines
1.5 KiB
C++

/*
dpmax[i][j]=编号[i,j]合并后的最大值
dpmin[i][j]=编号[i,j]合并后的最小值
if op[k] == +
dpmax[i][j]=max(dpmax[i][k]+dpmax[k+1][j])
dpmin[i][j]=min(dpmin[i][k]+dpmin[k+1][j])
else if op[k] == *
dpmax[i][j]=max(dpmax[i][k]*dpmax[k+1][j],
dpmax[i][k]*dpmin[k+1][j],
dpmin[i][k]*dpmax[k+1][j],
dpmin[i][k]*dpmin[k+1][j])
dpmin[i][j]=min(dpmax[i][k]*dpmax[k+1][j],
dpmax[i][k]*dpmin[k+1][j],
dpmin[i][k]*dpmax[k+1][j],
dpmin[i][k]*dpmin[k+1][j])
dpmax[i][j] = -1e9
dpmin[i][j] = 1e9
dp[i][i]=arr[i]
*/
#include <cstdint>
#include <iostream>
#include <istream>
#include <vector>
using ll = int64_t;
int main(){
std::iostream::sync_with_stdio(false);
std::cin.tie(nullptr);
ll n;
std::cin>>n;
const ll add=0,mul=1;
const ll n21=2*n+1;
std::vector<std::vector<ll>> op(n*2+1,std::vector<ll>(2));
for(ll i=1;i<=n;i++){
char c;
std::cin>>c;
if(c=='t'){
op[i][0]=add;
}else{
op[i][0]=mul;
}
std::cin>>op[i][1];
op[i+n]=op[i];
}
std::vector<std::vector<ll>> dpmax,dpmin;
for(ll s=1;s<n;s++){
ll e = s+n-1;
dpmax.clear();
dpmax.resize(n21,std::vector<ll>(n21,-1e9));
dpmin.clear();
dpmin.resize(n21,std::vector<ll>(n21,1e9));
for(ll i=s;i<=e;i++){
dpmax[i][i]=op[i][1];
}
for(ll i=s;i<=e;i++){
}
}
}