首页 > 其他分享 >2023.04.17 定时测试随笔 T2

2023.04.17 定时测试随笔 T2

时间:2023-04-17 23:13:59浏览次数:50  
标签:背包 17 int 2023.04 printf T2 maxm dp

T2 P2306 被 yyh 虐的 mzc

传送门:洛谷P2306

很显然的一道背包,但是 \(n,m<= 1e5\) ,普通的背包会 T 飞,怎么办呢。。。

认真看一下数据规模,\(a[i],b[i] <= 10\) 那么 \(a[i],b[i]\) 组合最多\(100\)种不同的家丁,说明会有重复,那么我们把所有重复的记在 \(t[a[i]][b[i]]\) 中,那这样就变成了数据规模为 \(100\) 的多重背包,但是 \(m<=1e5\) ,所以我们还需要多重背包二进制优化,不会的可以看看这个:

多重背包二进制优化

那这样代码就简单了;


贴代码:

#include <bits/stdc++.h>

using namespace std;

const int maxm = 1e5 + 5;
int t[11][11], dp[maxm], tot, n, m, k, w[maxm], c[maxm];
struct Grou {
    int w, c, k;
} g[105];

void read() {
    scanf("%d%d%d", &n, &m, &k);
    for (int i = 1; i <= n; ++ i) {
        scanf("%d%d", &w[i], &c[i]);
        if (!t[w[i]][c[i]]) {
            t[w[i]][c[i]] = ++ tot;
            g[tot].c = c[i], g[tot].w = w[i], g[tot].k = 1; 
        }
        else g[t[w[i]][c[i]]].k ++;
    }
    for (int i = 1; i <= tot; ++ i) {
        int j = 1;
        for (j = 1; j <= g[i].k; g[i].k -= j, j <<= 1) {
            for (int v = m; v >= j * g[i].w; -- v) {
                dp[v] = max(dp[v], dp[v - j * g[i].w] + j * g[i].c);
            }
        }
        if (g[i].k) {
            for (int v = m; v >= g[i].k * g[i].w; -- v)
                dp[v] = max(dp[v], dp[v - g[i].k * g[i].w] + g[i].k * g[i].c);
        }
    }
    if (dp[m] < k) printf("no\n");
    else printf("yes\n");
    printf("%d\n", dp[m]);
}

int main() {
    read();
    return 0;
}

标签:背包,17,int,2023.04,printf,T2,maxm,dp
From: https://www.cnblogs.com/florence25/p/17327899.html

相关文章

  • 每日总结2023-04-17
    今天完成了不同用户的查看数据库、每日收入查看等情况,并且可以实时更新。完成了Android查看当天营销数据这一项。把前几天的剩余事项完成,开心!o(* ̄▽ ̄*)ブ   ......
  • 【230417-3】某台小型晚会由6个节目组成,演出顺序有如下要求:节目甲必须排在前两位,节目
    ......
  • 【230417-4】甲乙二人从4门课程中各选修2门,则甲乙所选的课程中至少有1门不相同的选法
    ......
  • 【230417-6】若a-b=4,ab+x^2-6x+13=0. 求:x^a+x^b=?
    ......
  • 为什么2017年之后操作系统仍将扮演重要角色?
    操作系统的历史虽然不像计算科学那么久远,但却也已经拥有相当可观的发展历程。大型机客户于上世纪五十年代末编写了第一批操作系统,这些系统直到数十年后的今天仍拥有相当的知名度——其中包括来自IBM公司的OS/360以及贝尔实验室打造的Unix。在可预期的未来,操作系统仍将继续......
  • 为什么2017年之后操作系统仍将扮演重要角色?
    操作系统的历史虽然不像计算科学那么久远,但却也已经拥有相当可观的发展历程。大型机客户于上世纪五十年代末编写了第一批操作系统,这些系统直到数十年后的今天仍拥有相当的知名度——其中包括来自IBM公司的OS/360以及贝尔实验室打造的Unix。在可预期的未来,操作系统仍将继续......
  • 为什么2017年之后操作系统仍将扮演重要角色?
    操作系统的历史虽然不像计算科学那么久远,但却也已经拥有相当可观的发展历程。大型机客户于上世纪五十年代末编写了第一批操作系统,这些系统直到数十年后的今天仍拥有相当的知名度——其中包括来自IBM公司的OS/360以及贝尔实验室打造的Unix。在可预期的未来,操作系统仍将继续......
  • 4.17
    今天我完成了之前登录的修改,修复了点bug,写了主页面,然后通过seesion存取身份,主页面可以判断身份然后调取身份,基本完成了团队交给的任务遇到的问题:HttpServletResponse应用(三)sendRedirect()实现请求重定向不懂。把Sring当成int来做了 ......
  • 4.17博客
    写了:按上周六开会修改了之前的管理员流程,在赵胜府页面添加了自己的功能。问题:小组项目就做了些修改,之前的教学班信息和登陆注册信息表除了冲突准备:删除管理员信息修改功能,学生信息添加(以后人脸信息添加再做)。其他:完成上课科技政策查询系统修改要求,已经达到标准。 ......
  • 2.-4-17--栈与队列--插松枝
     人造松枝加工场的工人需要将各种尺寸的塑料松针插到松枝干上,做成大大小小的松枝。他们的工作流程(并不)是这样的:每人手边有一只小盒子,初始状态为空。每人面前有用不完的松枝干和一个推送器,每次推送一片随机型号的松针片。工人首先捡起一根空的松枝干,从小盒子里摸出最上面的......