POJ 1276 Cash Machine
来源:互联网 发布:数据清洗包括什么 编辑:程序博客网 时间:2024/06/05 15:23
题目大意:给你一个最大金额和一些纸币让你从这些纸币中挑选任意张,问不超过最大金额的总金额(所有纸币面额之和)
思路:不断枚举各种纸币,记录符合条件的总金额情况,更新最大值。
代码如下:
#include<stdio.h>#include<string.h> int dp[100100], num[1001000], v[100100]; // dp[] 记录总钱数的情况 eg: dp[i]==1 总钱数为i成立, dp[i]==0 总钱数为i不成立 // num[] 记录各种面额纸币的数量// v[] 记录各种纸币的面额 int main(){ int answer, n, i, j; while(scanf("%d %d",&answer,&n) != EOF) // answer 你最大可以挑选纸币的总值, n 纸币的种类 { for(i=1;i<=n;i++) scanf("%d %d",&num[i],&v[i]); // 输入各种纸币的数量 面额 if(answer==0||n==0) // 如果最大可以挑选纸币的总值为0 结果肯定是0 { printf("0\n"); continue; }int tem;memset(dp,0,sizeof(dp)); dp[0] = 1; // 初始总额为0 成立 int max = 0; // 可以达到的总金额,初始为0 for(i=1;i<=n;i++) // 枚举各个钱币 { for(j=max;j>=0;j--) // 枚举已经成立的总金额(max 是现在可以达到的最大总金额) { if(dp[j] == 1) { for(int k=1;k<=num[i];k++) // 加上当前的纸币 { tem = j+k*v[i]; if(tem>answer) continue; dp[tem] = 1; if(tem>max) max = tem; // 更新总金额 } } } } printf("%d\n",max); } return 0;}
阅读全文
0 0
- poj 1276 Cash Machine
- poj 1276 Cash Machine
- poj 1276Cash Machine
- POJ 1276 Cash Machine
- poj 1276 Cash machine
- poj 1276 Cash Machine
- poj 1276 Cash Machine
- POJ 1276 Cash Machine
- POJ 1276 Cash Machine
- POJ 1276 Cash Machine
- poj 1276 Cash Machine
- POJ-1276Cash Machine
- POJ 1276 cash machine
- POJ 1276 Cash Machine
- POJ 1276 Cash Machine
- POJ 1276 Cash Machine
- POJ 1276 Cash Machine
- POJ-1276-Cash Machine
- html日期加减
- EventBus源码分析(二):编译库源码解析
- c#下DLL文件的封装以及调用
- 关于Android应用内多语言切换的问题
- Oracle Spatial中SDO_Geometry说明及Demo例子
- POJ 1276 Cash Machine
- 每天学习一个linux命令--lsof
- ElasticSearch基本概念
- C#中using的使用方法
- ln软连接和硬连接的区别和联系
- 51Nod-1106-质数检测
- Apache Ranger中Yarn插件使用问题
- 51 NOD 1417 天堂里的游戏(博弈)
- Ubuntu 网卡配置