2018ACM—ICPC焦作网络预选赛B题 三维dp

题意就是给你一个数组,再给你一个字符串,这个字符串保证只有+-*/这四个字符,现在你有一个初始值,当你在数组中选则一个值时,你就要用字符串头部的运算符进行运算,然后这个头部字符向后移一位,问当所有的字符都被使用后最大值是多少?题目链接:https://nanti.jisuanke.com/t/31711思路:从题意上理解可以得出:这道题类似于01背包,对于每个房间都有进或者不进的情况,只不...
摘要由CSDN通过智能技术生成

题意就是给你一个数组,再给你一个字符串,这个字符串保证只有+-*/这四个字符,现在你有一个初始值,当你在数组中选则一个值时,你就要用字符串头部的运算符进行运算,然后这个头部字符向后移一位,问当所有的字符都被使用后最大值是多少?

题目链接: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 == &
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值