0
点赞
收藏
分享

微信扫一扫

2022-02-27每日刷题打卡

天蓝Sea 2022-02-27 阅读 41

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;
}

举报

相关推荐

0 条评论