题意就是给你一个数组,再给你一个字符串,这个字符串保证只有+-*/这四个字符,现在你有一个初始值,当你在数组中选则一个值时,你就要用字符串头部的运算符进行运算,然后这个头部字符向后移一位,问当所有的字符都被使用后最大值是多少?
题目链接:https://nanti.jisuanke.com/t/31711
思路:从题意上理解可以得出:这道题类似于01背包,对于每个房间都有进或者不进的情况,只不过在此基础上又增加一个条件是运算符的不同,那么就可以使用一个二维dp,然鹅,考虑到可能会存在到某个房间时,sum为负值,然后此时的运算符为*或者/,然后这个房间的权值为负,那么此时最小的值就变成了正值,这一点要考虑到,那么dp就变成三维;
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e3 + 10;
typedef long long ll;
int a[maxn];
ll dp[maxn][10][2];//dp[i][j][0]表示在第i个房间该第j个运算符时的值(o表示存储的最大值,1表示存储的此时最小值)
char s[maxn];
inline ll cal(ll sum, char b, int c)
{
if (b == '+')
{
return sum + c;
}
else if (b == &