CodeForces 688E-The Values You Can Make
题意:
给出n,k,分别代表硬币的数量与巧克力的价格,n个整数c1,c2,...ci...cn(ci代表第i块硬币的值);你可以从n块硬币中拿出金额恰好为k的硬币数并将其中的任意两块硬币组合得到一个数,将其保存下来(0和输入的n个数的值也必须被保存),最后将这些数按升序排列输出.
分析:
可以采用dp的递推方法,从1到n,dp[i][j]代表通过前i个元素和为i,能否组合出j.
代码如下:
#include <cstdio>
#include <iostream>
#include <ctime>
#include <vector>
#include <cmath>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <algorithm>
#include <cstring> using namespace std; #define LL long long
#define INF 0x3f3f3f3f
#define MOD 1000000007 const int maxn = 1e5+;
int a[maxn],n,p;
int dp[][],tmp[];
vector<int>ret; int main()
{
int i, j, k; while(scanf("%d%d",&n, &p)==)
{
ret.clear();
for(i = ; i <= n; i++ )
scanf("%d", &a[i]);
sort(a+, a++n);
dp[][] = ; //dp[i][j]代表通过前i个元素和为i,能否组合出j
for(i = ; i <= n; i++ )
for(j = p; j >= a[i]; j-- )
for(k = ; k + a[i] <= p; k++ )
if(dp[j-a[i]][k])
dp[j][k] = dp[j][k+a[i]] = ;
for(i = ; i <= p; i++ )
if(dp[p][i])
ret.push_back(i);
printf("%d\n", ret.size());
for(i = ; i < ret.size()-; i++ )
printf("%d ", ret[i]);
printf("%d\n", ret[ret.size()-]);
} return ;
}
CodeForces 688E-The Values You Can Make的更多相关文章
- codeforces 688E E. The Values You Can Make(dp)
题目链接: E. The Values You Can Make time limit per test 2 seconds memory limit per test 256 megabytes i ...
- 【43.75%】【codeforces 688E】The Values You Can Make
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
- Codeforces 687C. The Values You Can Make (dp)
题目链接:http://codeforces.com/problemset/problem/687/C 题目大概说给n个各有价值的硬币,要从它们中选出若干个组合成面值k,而要求的是各个方案里这些选出的 ...
- Codeforces 687C The Values You Can Make(DP)
题目大概说给n个各有价值的硬币,要从它们中选出若干个组合成面值k,而要求的是各个方案里这些选出的硬币能组合出来的面值有哪些. 有点绕.. dp[i][j][k]表示前i个硬币中 能否 组合成面值j且选 ...
- codeforces 687C - The Values You Can Make 简单dp
题意:一个数组a[i],你可以挑出若干个数(只能挑一次)加起来等于k, 针对每一种方案,你可以选出这若干个数的子集来组合新数 最后所有的方案能组合出多少种数 分析:一看数据范围n,k<=500 ...
- CodeForces 687C The Values You Can Make
$dp$,背包. $f[i][j][s]$表示前$i$个物品,凑出$j$价格的情况下,能否凑出$s$价格,$f[i][j][s]=1$表示能,否则不能. 转移很简单:如果$f[i][j][s]=1$, ...
- CodeForces 687C The Values You Can Make(动态规划)
这个也可以说是一个01背包了,里面也有一些集合的思想在里面,首先dp方程,dp[i][j]代表着当前数值为i,j能否被构成,如果dp[i][j] = 1,那么dp[i+m][j] 和 dp[i+m][ ...
- Codeforces Round #360 div2
Problem_A(CodeForces 688A): 题意: 有d天, n个人.如果这n个人同时出现, 那么你就赢不了他们所有的人, 除此之外, 你可以赢他们所有到场的人. 到场人数为0也算赢. 现 ...
- 全部省市县数据库(MySQL脚本) (转)
/*MySQL - 5.5.47 *************//*!40101 SET NAMES utf8 */; create table `base_area` ( `codeid` me ...
- JS+MySQL获取 京东 省市区 地区
采集了一下JD的省市区地区 (非常简单,只是做个记录) 1.建表:account_area 2.进入页面: https://reg.jd.com/reg/company 在浏览器(Firefox) ...
随机推荐
- Maps for Developers
苹果官方文档: Give your apps a sense of place with maps and location information. Present maps with custom ...
- LoadRunner脚本设计、场景设计和结果分析
本次笔记主要记录LoadRunner脚本设计.场景设计和结果分析 1. 脚本设计 录制模式 手工模式:插入步骤.手动编写 1.1 脚本增强: ...
- HtmlHelper的扩展
HtmlHelper的扩展: 注意点:扩展方法必须是静态方法,所在的类必须是静态类,所在的命名空间改成System.Web.MVC则能省略页面中必须添加命名空间的约束. //主要就是输出分页的超级链接 ...
- Delegate(委托与事件)
Delegate可以当它是一个占位符,比如你在写代码的时候并不知道你将要处理的是什么.你只需要知道你将要引入的参数类型和输出类型是什么并定义它即可.这就是书本上所传达的方法签名必须相同的意思. 系统自 ...
- IE奇怪报错
IE会有一些奇怪的报错信息,总结如下: 1. ”缺少对象” 这个报错从字面看还以为是那个object对象出了问题,经过调试才发现原来是有一个未定义的方法执行时,会报这个错误.
- Mayor's posters(线段树+离散化POJ2528)
Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 51175 Accepted: 14820 Des ...
- Hadoop安装指引
pre.ctl { font-family: "Liberation Mono", monospace } p { margin-bottom: 0.25cm; line-heig ...
- [问题2015S09] 复旦高等代数 II(14级)每周一题(第十教学周)
[问题2015S09] 设 \(A,B\) 是 \(n\) 阶复矩阵, 满足 \(\mathrm{rank}(AB-BA)\leq 1\), 证明: \(A,B\) 可同时上三角化. 问题解答请在以 ...
- hadoop2.0初识1.1
1.伪分布式hdfs文件系统的搭建(单节点文件系统) 1.1.根据上节的讲解,配置主机映射.jdk和解压hadoop压缩包 1.2.配置namenode 在/opt/modules/hadoop-2. ...
- c++ 指针常量,常量指针
当const遇到指针 一般来说,const修饰指针可以分为下面的集中情况. 描述 例子 含义 备注 const在*的左边 const int *b=&a; int const *b=& ...