POJ
来源:互联网 发布:c语言中char的意思 编辑:程序博客网 时间:2024/06/07 00:16
题意:要取价值为cash的钱,ATM机里面有N种面额的钱,每种面额为Ni,数量为Di,问最多能取出多少钱(要小于等于cash);
思路:以cash为背包容量,多重背包
#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<map>#include<queue>#include<cmath>#include<stack>#include<vector>#include<cstdio>#define MAXN 33000#define INF 0x3f3f3f3f#define lmid l,m,rt<<1#define rmid m+1,r,rt<<1|1#define ls rt<<1#define rs rt<<1|1#define Mod 1000000007#define i64 __int64#define LIMIT_ULL 100000000000000000using namespace std;int dp[100005];int a[15],b[15];void dc(int v,int w,int sum){ if(w*v>=sum) { for(int i=w;i<=sum;i++) dp[i]=max(dp[i],dp[i-w]+w); } else { int k=1; while(k<v) { for(int i=sum;i>=k*w;i--) dp[i]=max(dp[i],dp[i-k*w]+k*w); v-=k; k*=2; } for(int i=sum;i>=v*w;i--) dp[i]=max(dp[i],dp[i-v*w]+v*w); }}int main(){ int m; while(scanf("%d",&m)==1) { int n; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d%d",&a[i],&b[i]); memset(dp,0,sizeof(dp)); for(int i=0;i<n;i++) dc(a[i],b[i],m); cout<<dp[m]<<endl; }}
阅读全文
0 0
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- Linux centos7第一次启动时无图形界面安装
- Linux下的五种I/O模型
- 栈和队列
- SQL优化
- CF173B:Chamber of Secrets(最短路)
- POJ
- 浅谈深度学习尝常识:泛化、过拟合、Dropout、Attention
- 第三章 第二节:修改数据表——ALTER(三) 删除约束
- HDU5444 Elven Postman(搜索二叉树模板)
- Spring—Quartz定时调度CronTrigger时间配置格式说明与实例
- UVA10618TangoTangoInsurrection
- 继承的限制
- springboot【15】缓存之EhCache
- TCP建立连接为什么需要三次握手