2022-02-27每日刷题打卡
飞书——每日一题
面试题 16.26. 计算器
给定一个包含正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。
表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
示例 1:
输入: “3+2*2”
输出: 7
class Solution {
public:
stack<int>nums;
stack<char>op;
void operating()
{
int num1 = nums.top();
nums.pop();
int num2 = nums.top();
nums.pop();
char c = op.top();
op.pop();
switch (c)
{
case '+':nums.push(num1 + num2);
break;
case '-':nums.push(num2 - num1);
break;
case '*':nums.push(num1 * num2);
break;
case '/':nums.push(num2 / num1);
break;
}
}
int calculate(string s) {
int num1, num2;
int num=0;
unordered_map<char, int>mymap;
mymap['+'] = mymap['-'] = 1;
mymap['*'] = mymap['/'] = 2;
for (int i = 0; i < s.size(); i++)
{
if(s[i]==' ')
{
continue;
}
else if (s[i] >= 48 && s[i] <= 57)
{
while (s[i] >= 48 && s[i] <= 57)
{
num = num * 10 + (s[i] - 48);
i++;
}
i--;
nums.push(num);
num = 0;
}
else
{
while (op.size() != 0 && mymap[op.top()] >= mymap[s[i]])
{
operating();
}
op.push(s[i]);
}
}
while (op.size() != 0)
{
operating();
}
return nums.top();
}
};
一本通——动态规划
1290:采药
【题目描述】
辰辰是个很有潜能、天资聪颖的孩子,他的梦想是称为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”
如果你是辰辰,你能完成这个任务吗?
【输入】
输入的第一行有两个整数T(1<=T<=1000)和M(1<=M<=100),T代表总共能够用来采药的时间,M代表山洞里的草药的数目。接下来的M行每行包括两个在1到100之间(包括1和100)的的整数,分别表示采摘某株草药的时间和这株草药的价值。
【输出】
输出只包括一行,这一行只包含一个整数,表示在规定的时间内,可以采到的草药的最大总价值。
【输入样例】
70 3
71 100
69 1
1 2
【输出样例】
3
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<set>
#include<unordered_map>
#include<stack>
const int N = 1010;
int v[N], f[N],w[N];
int main()
{
int n, m, res = 0;
cin >> n >> m;
for (int i = 0; i < m; i++)cin >> v[i] >> w[i];
for (int i = 0; i < m; i++)
{
for (int j = n; j >= v[i]; j--)
{
f[j] = max(f[j], f[j - v[i]] + w[i]);
res = max(res, f[j]);
}
}
cout << res << endl;
return 0;
}