CF687C The Values You Can Make 题解

题目翻译感觉不明不白的(至少我看了几遍没看懂),这里给个较为清晰的题面。

题目描述

给你 \(n\) 个硬币,第 \(i\) 个硬币有一个价值 \(c_i\),你需要从中选出一些价值和为 \(k\) 的硬币组成一个集合,再输出这个集合中硬币可能组成的价值和。

算法

动态规划,背包。

分析

看完我给的题面描述其实已经很清晰了。这道题可以分为两步:

  • 从 \(n\) 个硬币中选出来价值和为 \(k\) 的硬币集合。
  • 输出硬币集合所能凑出的价值和。

我们很容易发现如果是任意一个步骤都很好做,用 \(01\) 背包解决。看数据范围 \(n\le 500\),考虑套两个 \(01\) 背包。

现在设计状态。我们发现对于每个硬币,它都有三种处理可能:不选入硬币集合,选入硬币集合但不用来凑价值和,选入硬币集合且用来凑价值和。所以我们设 \(dp[i][j][k]\) 表示前 \(i\) 个硬币中选出价值和为 \(j\) 的硬币集合,用来凑出价值和 \(k\) 是否可行。

状态转移方程就很好推了,对于前一个硬币有上述三种处理可能,只要有一种可行那么这个硬币就可行,转移方程为 \(dp_{i,j,k}=dp_{i-1,j,k}|dp_{i-1,j-c_i,k}|dp_{i-1,j-c_i,k-c_i}\)。分别对应三种处理可能。

注意一下边界 \(dp_{0,0,0}=1\),最终遍历一遍 \(dp_{n,k,p}(0\le p\le 500)\),如果为真就说明可以凑出输出即可,复杂度 \(\mathcal O(n^3)\)。

注意一下直接开三维数组会 MLE,需要用滚动数组优化,这里不细说了,和 \(01\) 背包一样。

代码

码风较丑,不喜勿喷。(@jiayixuan1205 的好看去看她的)

#include<bits/stdc++.h>
using namespace std;
namespace Ryan
{
const int N=500,M=505;
int dp[M][M],c[M];
int n,kk;
signed work()
{
cin>>n>>kk;
for(int i=1;i<=n;i++)
cin>>c[i];
dp[0][0]=1;
for(int i=1;i<=n;i++)
for(int j=N;j>=0;j--)
for (int k=N;k>=0;k--)
if(j>=c[i])
{
dp[j][k]|=dp[j-c[i]][k];
if(k>=c[i])
dp[j][k]|=dp[j-c[i]][k-c[i]];
}
int ans=0;
for(int i=0;i<=N;i++)
if(dp[kk][i])ans++;
cout<<ans<<endl;
for(int i=0;i<=N;i++)
if(dp[kk][i])
cout<<i<<" ";
return 0;
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
return Ryan::work();
}

题解:CF687C The Values You Can Make的更多相关文章

  1. CF687C. The Values You Can Make[背包DP]

    C. The Values You Can Make time limit per test 2 seconds memory limit per test 256 megabytes input s ...

  2. [cf687c]The Values You Can Make(01背包变形)

    题意:给定n个硬币,每个硬币都有面值,求每个能构成和为k的硬币组合中,任意个数相互求和的总额种类,然后将所有硬币组合中最后得到的结果输出. 解题关键:在01背包的过程中进行dp.dp[i][j]表示组 ...

  3. 算法与数据结构基础 - 贪心(Greedy)

    贪心基础 贪心(Greedy)常用于解决最优问题,以期通过某种策略获得一系列局部最优解.从而求得整体最优解. 贪心从局部最优角度考虑,只适用于具备无后效性的问题,即某个状态以前的过程不影响以后的状态. ...

  4. 全部省市县数据库(MySQL脚本) (转)

    /*MySQL - 5.5.47 *************//*!40101 SET NAMES utf8 */; create table `base_area` (    `codeid` me ...

  5. JS+MySQL获取 京东 省市区 地区

    采集了一下JD的省市区地区 (非常简单,只是做个记录) 1.建表:account_area   2.进入页面: https://reg.jd.com/reg/company 在浏览器(Firefox) ...

  6. POJ 2785 4 Values whose Sum is 0 (二分)题解

    思路: 如果用朴素的方法算O(n^4)超时,这里用折半二分.把数组分成两块,分别计算前后两个的和,然后枚举第一个再二分查找第二个中是否有满足和为0的数. 注意和有重复 #include<iost ...

  7. hdu 6301 Distinct Values(贪心)题解

    题意:长为n的串,给你m个区间,这些区间内元素不重复,问这样的串字典序最小为? 思路:用set保存当前能插入的元素,这样就能直接插入最小元素了.对操作按l排序,因为排过的不用排,所以两个指针L,R是一 ...

  8. POJ 2785 4 Values whose Sum is 0(想法题)

    传送门 4 Values whose Sum is 0 Time Limit: 15000MS   Memory Limit: 228000K Total Submissions: 20334   A ...

  9. POJ 2823 Sliding Window 题解

    POJ 2823 Sliding  Window 题解 Description An array of size n ≤ 106 is given to you. There is a sliding ...

  10. UVALive 6124 Hexagon Perplexagon 题解

    http://vjudge.net/problem/viewProblem.action?id=37480 East Central Regional Contest Problem C: Hexag ...

随机推荐

  1. 如何实现基于Cortex-A9 的UART裸机驱动

    前言 Uart在一个嵌入式系统中是一个非常重要的模块,他承担了CPU与用户交互的桥梁.用户输入信息给程序.CPU要打印一些信息给终端都要依赖UART. 本文将以Exynos4412的UART控制器为基 ...

  2. [粉丝问答16]应届生被放鸽子,怒怼HR!找工作和找对象哪个更残酷?

    很多应届生在求职过程中遇到过被放鸽子的情况,但是由于段位不高,资源不够,社会阅历尚浅,很多人都是忍气吐声,但是也不乏有些学生性格刚硬,怒怼的. 比如下面这位学生,竟然直接怼了HR. 0.应届硕士小伙怒 ...

  3. 蓝松SDK版本更新至【4.8.0】

    [Android更新] 1. android增加低精度模型,一些低端机也可以流畅抠图. 2. android针对直播机硬件做了特定API,并C语言开源. 3. 视频编辑引出帧解码图层, 允许外界异步形 ...

  4. 《Programming from the Ground Up》阅读笔记:p103-p116

    <Programming from the Ground Up>学习第7天,p103-p116总结,总计14页. 一.技术总结 1.读写文件 (1)linux.s linux.s: #fi ...

  5. Ubuntu 24.04 安装 Python 2.7

    Ubuntu 24.04 对 Python 2.7 的维护已经停止了,因此 Python 2.7 已从 Ubuntu 24.04 软件包移除.如果想要安装 Python 2.7,需要我们自己从 Pyt ...

  6. Windows 设置 FRP 自动启动

    由于 frps/frpc 不是 Windows 服务应用程序,因此我们不能直接使用 New-Service 命令创建 frps/frpc 服务.我们可以使用下面的方法将 frps/frpc 封装为 W ...

  7. 支付宝携手HarmonyOS SDK打造高效便捷的扫码支付体验

    背景 在日常的购物转账.生活缴费等在线支付中,用户在正式拉起支付界面前,均需要至少经历一次"识别"+两次"寻找",即识别归属应用.寻找应用.寻找扫码入口,才能完 ...

  8. OData – Get Started 搭建单侧环境

    前言 之前写过 EF Core – Get Started 搭建单侧环境, 这篇补上一个 WebApi + EF Core + OData 创建项目 dotnet new webapi -o EfCo ...

  9. EF Core – 乐观并发

    前言 之前写过 EF Core 悲观并发, 这篇主要讲一下乐观并发. 乐观并发的机制可以看这篇. Why Need This? 如果你用 EF Core 做数据管理, 建议你每个 Entity 都配置 ...

  10. CSS——了解

    导入方式:    选择器