poj 1787 Charlie's Change

简介: 思路: 多重背包 分析: 1 题目给定的数据明显就是多重背包,但是题目有个难点就是输出路径,0/1背包里面有输出路经的方法,做法做法是通过记录前面的状态 2 这一题还要求输出每种硬币的个数,那么这边利用mark数组,mark[i][0] ...
思路: 多重背包
分析:
1 题目给定的数据明显就是多重背包,但是题目有个难点就是输出路径,0/1背包里面有输出路经的方法,做法做法是通过记录前面的状态
2 这一题还要求输出每种硬币的个数,那么这边利用mark数组,mark[i][0] = pos 表示的是当前这个状态是取的是第pos个物品,mark[i][pos] = x;表示的是当前这个状态增加了x个物品

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

const int MAXN = 10010;
const int N = 5;
const int INF = 0x3f3f3f3f;

int v[N] = {0,1,5,10,25};
int sum , num[N] , dp[MAXN];
int ans[N] , path[MAXN] , mark[MAXN][N];

void zeroOnePack(int pos , int k , int cost , int weight){
    for(int i = sum ; i >= cost ; i--){
        dp[i] = max(dp[i] , dp[i-cost]+k);
        if(dp[i] == dp[i-cost]+1){
            path[i] = i-cost;
            mark[i][0] = pos;
            mark[i][pos] = k;
        }
    }
}

void completePack(int pos , int cost , int weight){
    for(int i = cost ; i <= sum ; i++){
        dp[i] = max(dp[i] , dp[i-cost]+1);
        if(dp[i] == dp[i-cost]+1){
            path[i] = i-cost;
            mark[i][0] = pos;
            mark[i][pos] = 1;
        }
    }
}

void multiplePack(int pos , int cost,int weight,int amount){
    if(cost*amount >= sum){
        completePack(pos , cost , weight);
        return;
    }
    int k = 1;
    while(k < amount){
        zeroOnePack(pos , k , k*cost , k*weight); 
        amount -= k;
        k *= 2; 
    }
    zeroOnePack(pos , amount , amount*cost , amount*weight);
}

int main(){
    while(scanf("%d",&sum)){
        scanf("%d%d%d%d",&num[1],&num[2],&num[3],&num[4]);
        if(!(sum+num[1]+num[2]+num[3]+num[4]))
            break;
        for(int i = 0 ; i < MAXN ; i++)
            dp[i] = -INF;
        dp[0] = 0;
        for(int i = 1 ; i <= 4 ; i++)
            multiplePack(i , v[i],v[i],num[i]);
        if(dp[sum] < 0)
            puts("Charlie cannot buy coffee.");
        else{
            int pos = sum;
            memset(ans , 0 , sizeof(ans));
            while(pos){
                int tmp = mark[pos][0];
                ans[tmp] += mark[pos][tmp]; 
                pos = path[pos];
            }
            printf("Throw in %d cents, %d nickels, %d dimes, and %d quarters.\n",ans[1],ans[2],ans[3],ans[4]);
        }
    }
    return 0;
}



目录
相关文章
|
机器学习/深度学习 人工智能 边缘计算
AI技术在医学影像诊断中的应用
传统的医学影像诊断需要耗费大量时间和人力,而随着人工智能技术的发展,AI在医学影像诊断中的应用也日益广泛。本文将探讨AI技术在医学影像诊断中的应用现状和未来发展,以及其对医疗行业的深远影响。
640 28
|
数据采集 编解码 运维
PMU
PMU
816 1
|
10月前
|
存储 SQL 运维
Hologres OLAP场景核心能力介绍-2024实时数仓Hologres线上公开课02
本次分享由Hologres产品经理赵红梅(梅酱)介绍Hologres在OLAP场景中的核心能力。内容涵盖OLAP场景的痛点、Hologres的核心优势及其解决方法,包括实时数仓分析、湖仓一体加速、丰富的索引和查询性能优化等。此外,还介绍了Hologres在兼容PG生态、支持多种BI工具以及高级企业级功能如计算组隔离和serverless computing等方面的优势。最后通过小红书和乐元素两个典型客户案例,展示了Hologres在实际应用中的显著效益,如运维成本降低、查询性能提升及成本节省等。
308 7
|
11月前
|
弹性计算 运维 Cloud Native
云原生架构的崛起与未来展望
在数字化转型的浪潮中,云原生架构凭借其高效、灵活和可扩展的特性,正逐渐成为企业IT战略的核心。本文旨在探讨云原生架构的定义、关键特性、实施优势以及面临的挑战,同时展望未来的发展趋势。通过深入分析,我们期望为读者提供一个关于云原生架构全面而深入的视角,助力企业在云计算时代做出更明智的决策。
283 30
|
定位技术 Android开发 iOS开发
引入百度地图,安卓出现白屏问题
引入百度地图,安卓出现白屏问题
382 57
|
数据安全/隐私保护 数据格式
高效的数据脱敏策略
在数字化时代,数据安全和隐私保护变得尤为重要。数据脱敏作为一种有效的数据保护手段,可以帮助企业降低数据泄露风险,同时遵守相关的法律法规。本文将介绍三种常见的数据脱敏方案,为您提供实用的技术干货。
351 1
|
供应链 安全 API
常见的京东商品接口类型
京东商品接口是京东开放平台提供的一系列API,支持商品详情查询、商品搜索、评价查询、库存管理和订单处理等功能。开发者需注册获取API密钥,并按文档要求构造请求。这些接口助力开发者构建丰富的电商应用,提升用户体验。使用时需遵守平台规定,确保数据安全。
|
存储 监控 安全
云存储的安全性:保护你的数据的技术探索
【8月更文挑战第8天】云存储的安全性是保障用户数据安全的重要基础。通过数据加密、访问控制、多副本备份、网络安全和物理安全等多种技术手段,云存储服务提供商能够为用户提供安全可靠的存储服务。然而,用户也需要加强自身的安全意识和管理措施,共同维护云存储环境的安全稳定。
1101 2
|
监控 数据挖掘 数据安全/隐私保护
ERP系统中的业务流程优化与再造
【7月更文挑战第25天】 ERP系统中的业务流程优化与再造
1001 2
|
网络协议 网络安全 数据安全/隐私保护
实现公网访问树莓派4B(花生壳内网穿透)
实现公网访问树莓派4B(花生壳内网穿透)
801 0
实现公网访问树莓派4B(花生壳内网穿透)