无锡-Day6&Day7

【Day6】做了一些有关背包的题目

具体可分为3大类:

1、01背包:每种物品只有一件, 取或不取                                                                                    2、多重背包:每种物品数量不等(或者说随机?),用二进制优化,将其转化为01背包,具体代码如下    for (int i = 1; i <= n; i++)
    {
        int x, y, z, jc = 1;
        cin >> x >> y >> z;
        while (jc <= z)
        {
            v[++cnt] = x * jc;
            w[cnt] = y * jc;
            z -= jc;
            jc *= 2;
        }
        if (z != 0) w[++cnt] = y * z, v[cnt] = x * z;
    }

3、完全背包:每种物品数量不限,将01的f[i][j] = max(f[i - 1][j], f[i - 1][j - v[i]] + w[i])改成f[i][j] = max(f[i - 1][j], f[i][j - v[i]] + w[i])即可

实际做题时要将三者区分清楚,同时注意混合运用。

【Day7】STL的相关学习与复习,今天做的主要是栈的题

栈:stack < > st;    st.push_back();    st.top();    st.pop();            遵循先进后出原则

一些题目:

括弧匹配检验:非常经典的题目,遇到右括号,判断栈顶是否是相对应的左括号。

后缀表达式求值:遇到数字进栈,遇到符号取出栈顶两元素,运算结果再进栈。

中缀转后缀:遇到数字输出, 遇到符号比较与栈顶符号的运算优先级,如果压不住(也就是优先级低于栈顶符号),则输出并弹出栈顶符号,直到要进栈的符号优先级大于新的栈顶符号或栈为空;如遇右括号,弹出栈顶符号直到弹出左括号。

表达式求值:将上两题结合起来

  • 21
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值