查看原题:

原题地址

初步思路:

  1. 采用贪心法求解,贪心策略如下:

    1. 排序,优先买最便宜的。
    2. 累加总数ans

初步代码:

(楼主评语:其实其他地方的编程实现不太重要,贪心策略才是问题)

#include <bits/stdc++.h>
using namespace std;
struct d
{
int price,num;
} goods[123456];
bool cmp(d a,d b)
{
return a.price<b.price;
}
int main()
{
int m,n;
scanf("%d %d",&m,&n);
for(int i = 0; i<n; ++i)
{
scanf("%d %d",&goods[i].price,&goods[i].num);
}
sort(goods,goods+n,cmp);
int ans = 0;
for(int i = 0; i<n; ++i)
{
if(m) {
int tmp = goods[i].price*goods[i].num;
if(tmp<=m) {
m-=tmp;
ans+=goods[i].num;
} else {
ans+=goods[i].price/m;
}
}
//printf("%d %d\n",goods[i].price,goods[i].num);
}
printf("%d",ans);
return 0;
}

评测结果

类型 组数
样例数据 1组
AC 3组
WA 7组

推测原因

推测是在

if(m) {
int tmp = goods[i].price*goods[i].num;
if(tmp<=m)
m-=tmp;
ans+=goods[i].num;
} else {
ans+=goods[i].price/m;
}
}

部分出了问题,这一部分正是决定我们“买不买”,“买多少”的部分。

else中累加的有问题,不应是此种商品的价格/m,另外m还没动呢,答案怎么会对呢?(逃...

于是,我请教了一下,得到的结果:

else 的时候能买的数量是当前的钱数 m 除以每件的 price 减少的钱就是这个数量再乘每件的 price。

改正代码:

#include <bits/stdc++.h>
using namespace std;
struct d
{
int price,num;
} goods[123456];
bool cmp(d a,d b)
{
return a.price<;b.price;
}
int main()
{
int m,n;
scanf("%d %d",&m,&n);
for(int i = 0; i<;n; ++i)
{
scanf("%d %d",&goods[i].price,&goods[i].num);
}
sort(goods,goods+n,cmp);
int ans = 0;
for(int i = 0; i<n; ++i)
{
if(m) {
int tmp = goods[i].price*goods[i].num;
if(tmp<=m) {
m-=tmp;
ans+=goods[i].num;
} else {
ans+=m/goods[i].price;
m-=ans*goods[i].price;
}
}
//printf("%d %d\n",goods[i].price,goods[i].num);
}
printf("%d",ans);
return 0;
}

以上是改正代码。

评测结果:

样例都没过哪来的评测结果???

如上,代码没有通过样例

推测原因:

再次去请教,有人告诉我:

m -= m / goods[i].price * goods[i].price ans 是累加的不是这一次买的啊,这一次买的数量是 m / goods[i].price

改正代码:

#include <bits/stdc++.h>
using namespace std;
struct d
{
int price,num;
} goods[123456];
bool cmp(d a,d b)
{
return a.price<b.price;
}
int main()
{
int m,n;
scanf("%d %d",&m,&n);
for(int i = 0; i<n; ++i)
{
scanf("%d %d",&goods[i].price,&goods[i].num);
}
sort(goods,goods+n,cmp);
int ans = 0;
for(int i = 0; i<n; ++i)
{
if(m) {
int tmp = goods[i].price*goods[i].num;
if(tmp<=m) {
m-=tmp;
ans+=goods[i].num;
} else {
ans+=goods[i].price/m;
}
}
//printf("%d %d\n",goods[i].price,goods[i].num);
}
printf("%d",ans);
return 0;
}

测评结果:

类型 组数
样例数据 通过
AC 10组

计蒜客T1846AC记的更多相关文章

  1. 折腾笔记-计蒜客T1167AC记

    查看原题 原题地址 思路: 判断回文+判断质数 初步代码: #include <bits/stdc++.h> using namespace std; bool prime(int n) ...

  2. 折腾笔记-计蒜客t1156AC记

    欢迎查看原题地址 此题思路(最初版): 暴力,得出最相近的,1000ms呢,除非数据超大,否则不超时. 说明: 爆搜,搜出结果,时间复杂度基本 $O(n^2)$ 注:本文所有时间(与空间)复杂度仅为估 ...

  3. 计蒜客 NOIP 提高组模拟竞赛第一试 补记

    计蒜客 NOIP 提高组模拟竞赛第一试 补记 A. 广场车神 题目大意: 一个\(n\times m(n,m\le2000)\)的网格,初始时位于左下角的\((1,1)\)处,终点在右上角的\((n, ...

  4. [计蒜客] 矿石采集【记搜、Tarjan缩点+期望Dp】

    Online Judge:计蒜客信息学3月提高组模拟赛 Label:记搜,TarJan缩点,树状数组,期望Dp 题解 整个题目由毫无关联的两个问题组合成: part1 问题:对于每个询问的起点终点,求 ...

  5. 计蒜客 作弊揭发者(string的应用)

    鉴于我市拥堵的交通状况,市政交管部门经过听证决定在道路两侧安置自动停车收费系统.当车辆驶入车位,系统会通过配有的摄像头拍摄车辆画面,通过识别车牌上的数字.字母序列识别车牌,通过连接车管所车辆信息数据库 ...

  6. 计蒜客的一道题dfs

    这是我无聊时在计蒜客发现的一道题. 题意: 蒜头君有一天闲来无事和小萌一起玩游戏,游戏的内容是这样的:他们不知道从哪里找到了N根不同长度的木棍, 看谁能猜出这些木棍一共能拼出多少个不同的不等边三角形. ...

  7. 计蒜客模拟赛5 D2T1 成绩统计

    又到了一年一度的新生入学季了,清华和北大的计算机系同学都参加了同一场开学考试(因为两校兄弟情谊深厚嘛,来一场联考还是很正常的). 不幸的是,正当老师要统计大家的成绩时,世界上的所有计算机全部瘫痪了. ...

  8. 计蒜客 等边三角形 dfs

    题目: https://www.jisuanke.com/course/2291/182238 思路: 1.dfs(int a,int b,int c,int index)//a,b,c三条边的边长, ...

  9. 计蒜客 方程的解数 dfs

    题目: https://www.jisuanke.com/course/2291/182237 思路: 来自:https://blog.csdn.net/qq_29980371/article/det ...

随机推荐

  1. Mysql数据库(三)Mysql表结构管理

    一.MySQL数据类型 1.数字类型 (1)整数数据类型包括TINYINT/BIT/BOOL/SMALLINT/MEDIUMINT/INT/BIGINT (2)浮点数据类型包括FLOAT/DOUBLE ...

  2. webpack中如何使用图标字体

    1.webpack安装相关依赖 $ npm install font-awesome-webpack less less-loader css-loader style-loader file-loa ...

  3. Magicodes.IE已支持导出Word、Pdf和Html

    关于Magicodes.IE 导入导出通用库,通过导入导出DTO模型来控制导入和导出,支持Excel.Word.Pdf和Html. GitHub地址:https://github.com/xin-la ...

  4. 使用linq实现回调函数

    通过输入的Id找到parentId是该Id的列表,然后找到parentId是上面那个Id的列表,以此类推,找到第一目录下所有子目录的的列表. 通过传入第一目录的Id,得到该目录下的所有子目录. 通过回 ...

  5. 【XSY1986】【BZOJ1455】罗马游戏

    就是一模板题. 合并就直接merge. pop就是将自己的值设为一,再将自己的左右儿子合并即可. 查询直接找到堆顶,输出. 模板左偏树 代码: #include<bits/stdc++.h> ...

  6. [2018-03-06] 基于Django的轻量级CMS Mezzanine搭建笔记

    一丶什么是Mezzanine? 它是基于django的内容管理平台(),组成简单,可扩展性和定制性强,特别是个小型的个人博客系统.它也提供了类似wordpress的管理页面.博客发布.图片展示等功能, ...

  7. 0818NOIP模拟测试25——B卷简记

    幸亏考场上没考这个,T1结论T2不会T3板子.估计会死的更惨 T1是学长讲过的Cat变式,沿直线y=x+1翻折方案数相减,现推,15分钟弄出来没什么问题. 只要不要把m,n读反就行. T3是个tarj ...

  8. 七月月赛T2

    题目描述 “X龙珠”是一款益智小游戏.游戏中有 n(2∣n) 个编号互不相同龙珠按照给定的顺序排成一个队列,每个龙珠上面都有一个编号.每次操作时,选择并取出龙珠队列中相邻的两个龙珠,放到目标队列的末尾 ...

  9. 最新JetBrains PyCharm 使用教程--常用快捷键和设置PyCharm为Eclipse快捷键(四)

    PyCharm常用快捷键使用 Ctrl + D:复制当前行 Ctrl + Y:删除当前行 Ctrl + Z 撤销 Shift + Enter:快速换行 Ctrl + /:快速注释 Ctrl + F: ...

  10. python经典面试算法题1.3:如何计算两个单链表所代表的数之和

    本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. 1.2 如何实现链表的逆序 [华为笔试题] 难度系数:⭐⭐⭐ ...