`

poj 1276

 
阅读更多

题意:
这道题的意思是给你一堆钱,各种面值的都有,比如10块的5张,5块的3张,2块的1张,请找出利用这些钱可以凑成的最接近且小于给定的数字cash的数额,比如cash=33块。我们可以取3张10块+2张1块=32,就是我们可以找到的那个最接近且小于33的数额。

思路:
多重背包问题的一种变形运用,比较简单。dp[i]用来表示第i大小金额的值是否能够取到。
代码如下:

#include <iostream>
using namespace std;

struct mac
{
    int n;
    int d;
}nd[11];
bool dp[100010];

int main()
{
    int i,j,n,cash,k,cmax;
    while(scanf("%d%d",&cash,&n) != EOF)//输入钱数与钱币的种类数
    {
        for(i = 0;i < n;i++)    
			scanf("%d%d",&nd[i].n,&nd[i].d);//每种钱币的个数与钱币的面值
        if(cash == 0 || n == 0)
        {
            printf("0\n");
            continue;
        }
        memset(dp,0,sizeof(dp));
        dp[0] = true;
        for(i = 0,cmax = 0;i < n;i++)
            for(j = cmax;j >= 0;j--)
                if(dp[j])
                    for(k = 1;k <= nd[i].n;k++)
                    {
                        int temp = j + k*nd[i].d;
                        if(temp > cash) 
							break;
                        dp[temp] = true;
                        if(temp > cmax) 
							cmax = temp;
                    }
					printf("%d\n",cmax);
    }
    return 0;
}
 

分享到:
评论

相关推荐

    poj1276解答和分析

    【标题】"poj1276解答和分析"是一个关于解决特定编程问题的资源集合,其中包含了作者对于这个问题的理解、解析以及相应的源代码。在编程竞赛或算法学习中,POJ(Problem On The Internet)是流行的一个在线判题系统...

    POJ1276-Cash Machine

    【标题】"POJ1276-Cash Machine"是一个编程竞赛题目,源自北京大学的在线判题系统POJ(Problem Set of Peking University)。这个题目挑战程序员解决现金自动取款机(ATM)的现金提取问题,涉及到算法设计和实现。 ...

    北大POJ1276-Cash Machine

    北大POJ1276试题代码

    晒代码之二——多重背包(POJ1276)

    晒代码之二——多重背包(POJ1276)

    POJ算法题目分类

    * 背包问题:背包问题是指解决问题的背包问题算法,如 poj1837、poj1276。 * 型如下表的简单 DP:型如下表的简单 DP 是指解决问题的简单 DP 算法,如 poj3267、poj1836、poj1260、poj2533。 * 计算几何学:计算几何...

    poj题目分类

    * 背包问题:例如 poj1837、poj1276。 * 类型 DP:例如 poj3267、poj1836、poj1260、poj2533。 中级 1. 基本算法: * C++的标准模版库的应用:例如 poj3096、poj3007。 * 较为复杂的模拟题的训练:例如 poj...

    poj训练计划.doc

    - 背包问题:如`poj1837, poj1276`。 - 简单DP:如`poj3267, poj1836`。 - **数学** - 组合数学:如`POJ3252, poj1850`。 - 数论:如`poj2635, poj3292`。 #### 第二阶段中级训练计划 #### 第3周至第4周(共...

    acm训练计划(poj的题)

    - (poj1837, poj1276):通过位运算来压缩状态,从而减少内存占用。 2. **背包问题**: - (poj3267, poj1836, poj1260, poj2533):零一背包、完全背包等问题的解决方案。 3. **二维动态规划**: - (poj3176, poj...

    acm poj300题分层训练

    5. **动态规划**和**数学**:poj1837、poj1276是简单的动态规划问题,poj3267、poj1836等进一步强化了DP,poj3252、poj1850等则涉及组合数学,poj2635、poj3292等训练了数论知识。 **中级阶段**则更加强调复杂算法...

    经典 的POJ 分类

    - POJ 1837、POJ 1276:基础动态规划问题。 #### 多维动态规划 - **题目示例**: - POJ 3267、POJ 1836:多维状态转移方程。 - POJ 1260、POJ 2533:涉及多个变量的状态转移。 - POJ 3176、POJ 1080:复杂的...

    acm新手刷题攻略之poj

    - 推荐题目:[poj1837](https://vjudge.net/problem/POJ-1837)、[poj1276](https://vjudge.net/problem/POJ-1276) - 概率论问题通常涉及事件的概率计算,需要理解条件概率、期望等概念。 2. **期望** - 推荐题目...

    ACM-POJ 算法训练指南

    1. **状态压缩动态规划**:通过位运算来表示状态,优化空间和时间复杂度(poj1837, poj1276)。 ### 六、几何算法 1. **凸包**:构建点集的凸包(poj3267, poj1836, poj1260, poj2533)。 2. **线段交**:计算线段...

    POJ 分类题目

    - poj1276 - **应用场景**:适用于资源分配、组合优化等问题。 **2. 其他典型动态规划问题** - **示例题目**: - poj3267 - poj1836 - poj1260 - poj2533 - poj3176 - poj1080 - poj1159 - **应用场景**:...

    ACMer需要掌握的算法讲解 (2).docx

    * 背包问题:POJ1837、POJ1276 * DP算法:POJ3267、POJ1836、POJ1260、POJ2533 二、图算法 * 度限制最小生成树和第K最短路:POJ1639、POJ3216、POJ2446 * 最优比率生成树:POJ2728 * 最小树形图:POJ3164 * 次小...

    ACM常用算法及其相应的练习题.docx

    * 背包问题:poj1837, poj1276 * 类似表的简单 DP:poj3267, poj1836, poj1260, poj2533 * 最长公共子序列:poj3176, poj1080, poj1159 * 最优二分检索树问题 六、数学 * 组合数学: + 加法原理和乘法原理 + ...

    ACM 详解算法目录

    例如,POJ1837和POJ1276是背包问题的典型例题,而POJ3267和POJ1836则是简单DP的经典例题。 数学部分涵盖了组合数学、数论和计算方法三方面。例如,POJ3252和POJ1850是组合数学的代表题,而POJ2635和POJ3292则是数论...

    ACM常用算法及其相应的练习题 (2).docx

    (1) 背包问题:poj1837, poj1276 (2) 简单DP:poj3267, poj1836, poj1260, poj2533 (3) 其他DP问题: 六、中级算法 本部分涵盖了中级算法,包括C++的标准模版库的应用、较为复杂的模拟题的训练、差分约束系统的...

    ACM算法总结大全——超有用!

    1. 背包问题:如poj1837、poj1276。 2. 简单动态规划:如表格形式的DP问题,如poj3267、poj1836等。 3. 最长公共子序列:如poj3176、poj1080等。 4. 最优二分检索树问题:如poj1159。 六、数学 1. 组合数学:加法...

    很快速的提高算法能力.pdf

    动态规划是解决复杂问题的关键,背包问题和特定类型的 DP 问题如 poj1837 和 poj1276 可以帮助理解这一概念。 数学知识是算法中的另一个重要组成部分,包括组合数学(如 poj3252)、数论(如 poj2635)和计算方法...

Global site tag (gtag.js) - Google Analytics