P2725 邮票 Stamps

    • 37通过
    • 224提交
  • 题目提供者该用户不存在
  • 标签USACO
  • 难度普及/提高-

提交  讨论  题解

最新讨论

  • 为什么RE?在codevs上AC的。

题目背景

给一组 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K —— 表示信封上能够贴 K 张邮票。计算从 1 到 M 的最大连续可贴出的邮资。

题目描述

例如,假设有 1 分和 3 分的邮票;你最多可以贴 5 张邮票。很容易贴出 1 到 5 分的邮资(用 1 分邮票贴就行了),接下来的邮资也不难:

6 = 3 + 3
7 = 3 + 3 + 1
8 = 3 + 3 + 1 + 1
9 = 3 + 3 + 3
10 = 3 + 3 + 3 + 1
11 = 3 + 3 + 3 + 1 + 1
12 = 3 + 3 + 3 + 3
13 = 3 + 3 + 3 + 3 + 1

然而,使用 5 枚 1 分或者 3 分的邮票根本不可能贴出 14 分的邮资。因此,对于这两种邮票的集合和上限 K=5,答案是 M=13。 [规模最大的一个点的时限是3s]

小提示:因为14贴不出来,所以最高上限是13而不是15

输入输出格式

输入格式:

第 1 行: 两个整数,K 和 N。K(1 <= K <= 200)是可用的邮票总数。N(1 <= N <= 50)是邮票面值的数量。

第 2 行 .. 文件末: N 个整数,每行 15 个,列出所有的 N 个邮票的面值,每张邮票的面值不超过 10000。

输出格式:

第 1 行:一个整数,从 1 分开始连续的可用集合中不多于 K 张邮票贴出的邮资数。

输入输出样例

输入样例#1:

5 2
1 3
输出样例#1:

13

说明

题目翻译来自NOCOW。

USACO Training Section 3.1

分析:一开始想到的就是从给定的邮票开始dfs,如果搜到的邮资不超过最大范围,就标记上,这样会超时.打个表,发现有很多次都搜索到同一个数字,因为次数有限,如果能够使搜索到这个数字的次数最少,那么能够到达的邮资就更多,这样的话就开一个数组记录一下最少次数,不过这样还是不能改变超时的命运.重新分析一下搜索的方法,是“发”的,也就是从一个已知状态向未知状态扩展,还有一种是“收”的,即用已知状态更新当前的位置状态,之前采用的第一种方法,很难优化,而采用第二种方法,先给邮票面值排序,从小到大枚举,如果用当前枚举到的邮资减当前枚举到的邮票面值为负数,那么就可以停止枚举.这样就不会超时了.

49分代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; int k, n,a[],maxn,vis[]; bool cmp(int x, int y)
{
return x > y;
} void dfs(int x,int kk)
{
vis[x] = ;
for (int i = ; i <= n; i++)
if (x + a[i] <= maxn && kk + <= k)
dfs(x + a[i],kk + );
} int main()
{
scanf("%d%d", &k, &n);
for (int i = ; i <= n; i++)
{
scanf("%d", &a[i]);
}
sort(a + , a + + n, cmp);
maxn = a[] * k; for (int i = ; i <= n; i++)
if (!vis[a[i]])
dfs(a[i],); for (int i = ;i <= maxn; i++)
if (!vis[i])
{
printf("%d\n", i - );
break;
} //while (1); return ;
}

AC代码:

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm> using namespace std; int k, n,fen[],f[]; int main()
{
scanf("%d%d", &k, &n);
for (int i = ; i <= n; i++)
scanf("%d", &fen[i]);
sort(fen + , fen + + n);
for (int i = ; i <= ;i++)
f[i] = ;
f[] = ;
int cnt = ;
do
{
cnt++;
for (int j = ; j <= n; j++)
if (cnt >= fen[j])
f[cnt] = min(f[cnt], f[cnt - fen[j]] + );
else
break;
} while (f[cnt] <= k && f[cnt] != );
printf("%d", cnt - ); return ;
}

洛谷P2725 邮票 Stamps的更多相关文章

  1. 洛谷 P2725 邮票 Stamps 解题报告

    P2725 邮票 Stamps 题目背景 给一组 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K -- 表示信封上能够贴 K 张邮票.计算从 1 到 M 的最大连续可贴出的邮资. 题目描 ...

  2. 【题解】洛谷 P2725 邮票 Stamps

    目录 题目 思路 \(Code\) 题目 P2725 邮票 Stamps 思路 \(\texttt{dp}\).\(\texttt{dp[i]}\)表示拼出邮资\(i\)最少需要几张邮票. 状态转移方 ...

  3. 洛谷 P2725 邮票 Stamps Label:DP

    题目背景 给一组 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K —— 表示信封上能够贴 K 张邮票.计算从 1 到 M 的最大连续可贴出的邮资. 题目描述 例如,假设有 1 分和 3 ...

  4. 洛谷 P2725 邮票 Stamps

    题目传送门 解题思路: f[i]表示凑总面值i所需的最少邮票张数,然后快乐的跑完全背包. AC代码: #include<iostream> #include<cstdio> # ...

  5. 洛谷 P2725 邮票题解

    题目背景 给一组 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K —— 表示信封上能够贴 K 张邮票.计算从 1 到 M 的最大连续可贴出的邮资. 题目描述 例如,假设有 1 分和 3 ...

  6. 洛谷 P2725 解题报告

    P2725 邮票 Stamps 题目背景 给一组 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K -- 表示信封上能够贴 K 张邮票.计算从 1 到 M 的最大连续可贴出的邮资. 题目描 ...

  7. 【洛谷】P2725 邮票 Stamps(dp)

    题目背景 给一组 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K —— 表示信封上能够贴 K 张邮票.计算从 1 到 M 的最大连续可贴出的邮资. 题目描述 例如,假设有 1 分和 3 ...

  8. 洛谷P1021邮票面值设计 [noip1999] dp+搜索

    正解:dfs+dp 解题报告: 传送门! 第一眼以为小凯的疑惑 ummm说实话没看标签我还真没想到正解:D 本来以为这么多年前的noip应该不会很难:D 看来还是太菜了鸭QAQ 然后听说题解都可以被6 ...

  9. P2725 邮票 Stamps(完全背包+限制填充数)

    题目链接:https://www.luogu.org/problem/show?pid=2725 题目大意:给一组 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K —— 表示信封上能够贴 ...

随机推荐

  1. [platform]新旧内核的device设备注册对比

    转自:http://blog.chinaunix.net/uid-7332782-id-3268801.html 1. Version2.6内核启动过程 start_kernel( ) //板子上电启 ...

  2. 236. Lowest Common Ancestor of a Binary Tree

    Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...

  3. 调试压缩后的Javascript文件:在 Chrome 和 Safari ,选择“脚本”标签,找到相应的文件,然后点击“{}”图标(pretty print,在面板底部)

  4. ADF_Database Develop系列1_通过UML数据库开发之建Logical UML Class Model

    2013-05-01 Created By BaoXinjian

  5. PLSQL_基础系列05_视图控制WITH CHECK OPTION(案例)

    2014-12-09 Created By BaoXinjian

  6. BloomFilter–大规模数据处理利器(转)

    BloomFilter–大规模数据处理利器 Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法.通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求1 ...

  7. error-iis-Service Unavailable

    Service Unavailable Service Unavailable HTTP Error 503. The service is unavailable.

  8. 玄机论坛Socket类库源码 当前版本 2.6.3 更新日期:10-09/2015 z

    http://bbs.msdn5.com/thread-27-1-1.html 本类库采用TcpLister,TcpClient高度封装, 采用NetworkStream进行异步模式读取数据. 采用S ...

  9. tomcat服务器不输出访问日志

    有时候一个WEB服务作为接口部署在tomcat下,因为访问很频繁,导致/var/log/tomcat7下的访问日志急剧膨胀,影响服务器的性能. 在这里我的方法是关闭访问日志,关闭方法为将访问日志的输出 ...

  10. JSON序列化和反序列化

    public class JSONHelper { public static string Serialize<T>(T obj)//序列化为JSON { System.Runtime. ...