POJ3040--Allowance(贪心)
http://poj.org/problem?id=3040
思路:
输入时,如果有大于c的,直接把数量加到结果中,不把他加到数组中
把钱按面值排序
想取最大面额的钱,保证取到的钱小于等于c
然后取最小面额的钱
#include<iostream>
#include<vector>
#include<algorithm>
#include<string.h>
using namespace std;
int main(){
int n,c;
cin>>n>>c;
int ans=;
vector<pair<int,int> > v;
for(int i=;i<n;i++){
int a,b;
cin>>a>>b;
if(a>=c)
ans+=b;
else
v.push_back(make_pair(a,b));
}
int use[];
sort(v.begin(),v.end());
while(true){
int money=;
memset(use,,sizeof(use));
int flag=;//1表示成立 0不成立
for(int i=v.size()-;i>=;i--){
if(v[i].second!=){
int amount=(c-money)/v[i].first;
int minn=min(amount,v[i].second);
// v[i].second-=minn; 不能这样取了就直接减到.因为可能目前这种取法,并不成立
money+=v[i].first*minn;
use[i]=minn;
if(money==c){
flag=;
break;
}
}
}
if(flag==){
for(int j=;j<v.size();j++){
if(v[j].second!=&&v[j].second>use[j]){
int diff=c-money;
int amount=diff/v[j].first;
if(amount==)//如果0,说明当前的差值小于c,所以只要再取一个,就可以大于c
amount=;
int minn=min(amount,v[j].second);
money+=v[j].first*minn;
use[j]+=minn;
if(money>=c){
flag=;
break;
}
}
}
}
if(flag==){
int minn=INT_MAX;
for(int i=;i<v.size();i++){
if(use[i]!=){
minn=min(minn,v[i].second/use[i]);
}
}
ans+=minn;
for(int i=;i<v.size();i++){
if(use[i]!=){
v[i].second-=use[i]*minn;
}
}
}
else{
break;
}
}
cout<<ans<<endl;
return ;
}
POJ3040--Allowance(贪心)的更多相关文章
- poj-3040 Allowance (贪心)
http://poj.org/problem?id=3040 FJ 有n种不同面值的硬币,每种硬币都有相应的个数,大面值的硬币值总能被小面值的硬币值整除,每周需要支付 Bessie c元,问最多能 ...
- poj3040(双向贪心)
Allowance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1540 Accepted: 637 Descript ...
- POJ 3040 Allowance 贪心
这题目的贪心思路还是有一点细节问题的. 还没有证明,据说是因为题目给的条件是每个价格是比它小的价格的倍数才能这么贪心的. 思路如下: 假设要给奶牛的钱为C 1)从大面值到小面值一次拿钱,能拿多少拿多少 ...
- poj3040 Allowance
思路: 贪心. 看了题解说是 先把面值从大到小排序然后从头往尾扫,只要不超额,能取多少去多少然后如果还有剩余,就从尾往头扫,尽量取,让他恰好超额 不过并不懂证明. 实现: #include <i ...
- 《挑战程序设计竞赛》2.2 贪心法-其它 POJ3617 3069 3253 2393 1017 3040 1862 3262
POJ3617 Best Cow Line 题意 给定长度为N的字符串S,要构造一个长度为N的字符串T.起初,T是一个空串,随后反复进行下列任意操作: 从S的头部(或尾部)删除一个字符,加到T的尾部 ...
- 【贪心算法】POJ-3040 局部最优到全局最优
一.题目 Description As a reward for record milk production, Farmer John has decided to start paying Bes ...
- 【POJ - 3040】Allowance(贪心)
Allowance 原文是English,这里就放Chinese了 Descriptions: 作为创纪录的牛奶生产的奖励,农场主约翰决定开始给Bessie奶牛一个小的每周津贴.FJ有一套硬币N种(1 ...
- POJ 3040 Allowance【贪心】
POJ 3040 题意: 给奶牛发工资,每周至少 C 元.约翰手头上有面值V_i的硬币B_i个,这些硬币的最小公约数为硬币的最小面值.求最多能发几周? 分析: 贪心策略是使多发的面额最小(最优解).分 ...
- 【BZOJ】1685: [Usaco2005 Oct]Allowance 津贴(贪心)
http://www.lydsy.com/JudgeOnline/problem.php?id=1685 由于每个小的都能整除大的,那么我们在取完大的以后(不超过c)后,再取一个最小的数来补充,可以证 ...
- poj3040 发工资(贪心)
题目传送门 题目大意:给一个人发工资,给出不同数量不同面额,(大面额一定是小面额的倍数),问最多能发几天,(每天实发工资>=应发工资). 思路:首先,将大于等于c的面额的钱直接每个星期给奶牛一张 ...
随机推荐
- jmeter入门案例(二)
jmeter入门简介(一)下载及元件介绍https://www.cnblogs.com/wish5714/p/9714930.html jmeter典型的http请求示例 业务场景 银行卡收单交易,模 ...
- CentOS 6.8下网卡配置、桥接模式和NAT连接模式、VMware虚拟机克隆网卡配置
模式一:桥接模式: 1. 在VMware中安装好虚拟机后,虚拟机网卡设置:选择桥接模式 2. 查看本机的网络信息: 找到ip.子网掩码.网关.DNS等. 找一个没有使用的ip,例如:192.168.1 ...
- 常用vi命令
i 在当前光标处插入字符,并进入编辑模式 o 在当前光标插入下一行 x 从当前光标处向后删除一个字符. dd 删除当前光标处所在行 :q! 强制退出不保存 :q 退出(文本有改动则警告) :w 保存 ...
- time 命令
语法 time [options] COMMAND [arguments] 参数 -o 或 --output=FILE:设定结果输出档.这个选项会将 time 的输出写入 所指定的档案中.如果档案已经 ...
- 监控服务器配置(四)-----OracleDb_exporter安装配置
1.下载oracle客户端安装包(linux版)到 /opt/minitor/oracleDb . 下载地址:https://download.csdn.net/download/a155657721 ...
- Jenkins+Gradle+Docker打docker镜像包上传至s3
gradle打包跟maven打包的环境搭建有相似之处,可参考maven打包https://www.cnblogs.com/chenchen-tester/p/6408815.html 进入Jenkin ...
- 微信小程序上拉下拉刷新
小程序提供了,onPullDownRefresh和onReachBottom两个事件函数监听下拉和上拉事件函数.提示加载中,取消加载中 效果: js文件 // pages/enterprise/ent ...
- win10修改TXT文件的关联软件
打开注册表,按下面路径找: HKEY_CLASSES_ROOT -> txtfile -> shell -> open -> command 在右边可以看到一个默认文件,原来的 ...
- laraval migration 新增字段或者修改字段的方法
1.进入项目根目录执行artisan命令生成migration文件,可以指定--table和--path参数,会在对应目录下生成migration文件. php artisan make:migrat ...
- nova-api nova-compute 启动服务的时候有的没有加配置文件有的加了
nova/nova/cmd/api.pyfrom nova import config def main(): config.parse_args(sys.argv) logging.setup(CO ...