简单版(P2347)传送门

原题传送门

有一道类似的题目(P2347),先扯一扯~


1.P2347

题目分析

动态规划入门题(01背包可行性问题)~

我们 \(dp_j\) 为能否用砝码称出 \(j\) 重量,1 为可以,0 为不可以

  • 为了转移,\(dp_{_{0}} \gets 1\)什么都不放时,重量为 0,因此可以称出。

那么枚举 \(dp_{_{1}} \sim dp_{sum}(sum\) 为砝码可称出的最大重量\()\)。

  • 如果 \(j-w\) 可以称出,且重量为 \(w\) 的砝码存在未超出个数限制,则 \(j\) 可以称出。即 \(dp_j = dp_{j - w}(j - w \geqslant 0)\)

那么动态转移方程显而易见:

  • \(dp_j = dp_{ j - a_i \times k} (j - a_i \times k \geqslant 0 , k \leqslant b_i)\)

PS:\(a_i\):砝码 \(i\) 的重量,\(b_i\):砝码 \(i\) 有的个数

代码

#include<bits/stdc++.h>
using namespace std;
int n = 6, ans = 0, sum = 0;
int dp[1100], a[10] = {0, 1, 2, 3, 5, 10, 20}, b[200];
int main()
{
fill(dp, dp + 1100, 0);
for (int i = 1; i <= n; i++) cin >> b[i], sum += a[i] * b[i];
dp[0] = 1;
for (int i = 1; i <= n; i++){
for (int j = sum; j >= 0; j--){ //反着来,不然会重复
for (int k = 1; k <= b[i]; k++){
if (dp[j - a[i]*k] == 1 and j - a[i]*k >= 0 and dp[j] == 0)
dp[j] = 1,ans++;
}
}
} cout << "Total=" << ans;
return 0;
}

2.P8742

题目分析

因为砝码可以放另一边,即减去这个砝码的重量,所以反着还要再来遍历一遍。

如果 \(dp[j] + a[i] = 1\) 那么 \(dp[j] \gets 1\)

转移方程:

  • \(dp_j = dp_{ j - a_i } (j - a_i \geqslant 0)\)

  • \(dp_j = dp_{ j + a_i } (j + a_i \leqslant sum)\)

代码

#include <bits/stdc++.h>
using namespace std;
int dp[100010], a[110];
long long sum = 0, ans = 0;
int main()
{
int n;
cin >> n;
fill(dp, dp + 100010, 0);
dp[0] = 1;
for (int i = 0; i < n; i++)
cin >> a[i], sum += a[i];
for (int i = 0; i < n; i++){
for (int j = sum; j >= a[i]; j--){ //优化,不枚举i<a[j]的情况
if (dp[j - a[i]] == 1 and dp[j] != 1)
dp[j] = 1, ans++;
}
}
for (int i = 0; i < n; i++){
for (int j = 1; j <= sum - a[i]; j++){ //同理
if (dp[j + a[i]] == 1 and dp[j] == 0)
dp[j] = 1, ans++;
}
}
cout << ans;
return 0;
}

洛谷 P8742题解的更多相关文章

  1. [洛谷P3376题解]网络流(最大流)的实现算法讲解与代码

    [洛谷P3376题解]网络流(最大流)的实现算法讲解与代码 更坏的阅读体验 定义 对于给定的一个网络,有向图中每个的边权表示可以通过的最大流量.假设出发点S水流无限大,求水流到终点T后的最大流量. 起 ...

  2. 洛谷P8924题解

    洛谷 P8924 题解 题目描述 给你一个函数,画出它的函数图像(* 表示经过该点,. 表示不经过该点),大小为 \(n\times m\),其中 \(x\) 的范围是 \([0,n-1]\),\(f ...

  3. 洛谷P5759题解

    本文摘自本人洛谷博客,原文章地址:https://www.luogu.com.cn/blog/cjtb666anran/solution-p5759 \[这道题重在理解题意 \] 选手编号依次为: \ ...

  4. 关于三目运算符与if语句的效率与洛谷P2704题解

    题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图.在每一格平原地形上最 ...

  5. c++并查集配合STL MAP的实现(洛谷P2814题解)

    不会并查集的话请将此文与我以前写的并查集一同食用. 原题来自洛谷 原题 文字稿在此: 题目背景 现代的人对于本家族血统越来越感兴趣. 题目描述 给出充足的父子关系,请你编写程序找到某个人的最早的祖先. ...

  6. 洛谷P2607题解

    想要深入学习树形DP,请点击我的博客. 本题的DP模型同 P1352 没有上司的舞会.本题的难点在于如何把基环树DP转化为普通的树上DP. 考虑断边和换根.先找到其中的一个环,在上面随意取两个点, 断 ...

  7. 【洛谷】题解 P1056 【排座椅】

    题目链接 因为题目说输入保证会交头接耳的同学前后相邻或者左右相邻,所以一对同学要分开有且只有一条唯一的通道才能把他们分开. 于是可以吧这条通道累加到一个数组里面.应为题目要求纵列的通道和横列的通道条数 ...

  8. 洛谷P3572题解

    这道题实在是一道 毒瘤 题,太坑爹了.那个写 \(deque\) 的题解亲测只有80分,原因 不言而明 ,这道题居然 丧心病狂 到 卡STL . 好了,不吐槽了,进入正题 题目分析: 这是一道十分 简 ...

  9. [洛谷P1972][题解][SDOI2009]HH的项链

    别碰我! 自己还是太蒟了…… 看了好久,最后抄参考题解打出来的…… 前面的可能影响后面的,所以按照询问右端点排序 这时候维护一个前缀和数组就可以了, 那么问题又来了,去重? 可以这样,从前往后枚举,如 ...

  10. 【洛谷P1119题解】灾后重建——(floyd)

    这道题告诉我,背的掉板子并不能解决一切问题,理解思想才是关键,比如不看题解,我确实想不清楚这题是弗洛伊德求最短路 (我不该自不量力的说我会弗洛伊德了我错了做人果然要谦虚) 灾后重建 题目背景 B地区在 ...

随机推荐

  1. MybatisPlus------代码生成器

    快速开发: 代码生成器: (1)模版:MyBatisPlus提供 (2)数据库相关配置:读取数据库获取信息 (3)开发者自定义配置:手工配置 package com.ithema; import co ...

  2. SpringBoot——Swagger2 接口规范

    更多内容,前往 IT-BLOG 如今,REST和微服务已经有了很大的发展势头.但是,REST规范中并没有提供一种规范来编写我们的对外 REST接口 API文档.每个人都在用自己的方式记录 api文档, ...

  3. CZHA0黑客游戏

    一个自己开发的黑客游戏,里面用到了自研AC库 A0阶段: from ac import* from time import * from sys import * def printf(text): ...

  4. flutter util---->常用的一些工具方法

    copy text to clipboard Clipboard.setData(ClipboardData(text: string)); since Flutter1.9, you can use ...

  5. CISCN2021-第十四届全国大学生信息安全竞赛-WriteUp

    WriteUp - Maple_root -CISCN2021 总结 总得分:3400 总排名:203 赛区排名:21 第一次认真参加正式的CTF,24+3小时的脑血栓比赛时长,收获还是很多的. 开卷 ...

  6. vue之列表渲染v-for

    目录 简介 用法 v-for可循环的几种变量的展示 数组的循环展示 对象的循环展示 字符串的循环展示 数字的循环展示 v-for搭档key值的说明 js循环几种方式 基于索引的循环 数组的循环 数组基 ...

  7. docker方式实现redis数据持久化离线安装

    保存镜像 root@hello:~# docker pull redis:latest latest: Pulling from library/redis a2abf6c4d29d: Already ...

  8. pandas之分类操作

    通常情况下,数据集中会存在许多同一类别的信息,比如相同国家.相同行政编码.相同性别等,当这些相同类别的数据多次出现时,就会给数据处理增添许多麻烦,导致数据集变得臃肿,不能直观.清晰地展示数据. 针对上 ...

  9. [数据结构]二叉搜索树(BST) VS 平衡二叉排序树(AVL) VS B树(平衡多路搜索树) VS B+树 VS 红黑树(平衡二叉B树)

    1 二叉排序树/二叉查找树/Binary Sort Tree 1种对排序和查找都很有用的特殊二叉树 叉排序树的弊端的解决方案:平衡二叉树 二叉排序树必须满足的3条性质(或是具有如下特征的二叉树) 若它 ...

  10. 和 chatgpt 聊了一会儿分布式锁 redis/zookeeper distributed lock

    前言 最近的 chatGPT 很火爆,听说取代程序员指日可待. 于是和 TA 聊了一会儿分布式锁,我的感受是,超过大部分程序员的水平. Q1: 谈一谈 java 通过 redis 实现分布式 锁 ch ...