查看原题:

原题地址

初步思路:

  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. Redis5源码解析-Sentinel

    简单的概念就不解释.基于Redis5.0.5 从Sentinel主函数触发 在sentinel.c文件的最后面可以发现sentinelTimer函数,这个就是Sentinel的主函数,sentinel ...

  2. 转:linux环境mysql root用户密码重置

    经常设置了mysql的root密码,就忘记掉了,这种事还是经常发生的.转自他人(http://www.osyunwei.com/archives/2014.html),权做笔记.linux环境下,解决 ...

  3. ASP_MVC项目设计技巧规则

    对于上述这种类型的前台页面,属于典型的List型的页面,那么,对于model的设计,要考虑前台人员的负担,尽量简洁: model: Name : 对应产品名称,如FMOS_WPF.FMOS_Tun.. ...

  4. CSPS模拟 76

    前序遍历,中序遍历,后序遍历 说的都是根节点在前,根节点在中,根节点在后. 长记性!

  5. 关于一道你们眼中的水题 Windy数 的乱写(数位dp)

    啊一道水题有什么好说的 上课听不懂,下课泪两行. 有的人什么套路都会,我.. 只能可怜巴巴的抄代码,然后自己总结,顺(zhu)便(yao)颓博客 1.递推dp的思路做到一半死了,怎么也想不出来如何处理 ...

  6. hadoop2.6集群环境搭建

    版权声明:本文为博主原创文章,未经博主允许不得转载. 一.环境说明 1.机器:一台物理机 和一台虚拟机 2.Linux版本:[Spark@S1PA11 ~]$ cat /etc/issueRed Ha ...

  7. Function题解

    这个题最优策略一定是向左上走到某一列再往上一直走. n*q在线暴力可做,离线按y排序,单调栈维护凸壳. 具体来说:对于i<j若A[i]>A[j] 即j的斜率小而且纵截距小,一定比i优,并且 ...

  8. 还看不懂同事的代码?Lambda 表达式、函数接口了解一下

    当前时间:2019年 11月 11日,距离 JDK 14 发布时间(2020年3月17日)还有多少天? // 距离JDK 14 发布还有多少天? LocalDate jdk14 = LocalDate ...

  9. [转载]1.2 UiPath第一个案例Hello World

    1.弹出框Hello World 在弹出的窗口中创建序列 在新建的序列中,在搜索框中输入“Message Box”,Studio自动搜索出结果. 选中“Message Box”,然后拖拽到界面带+号区 ...

  10. docker项目——搭建飞机大战小游戏

    项目2:搭建打飞机小游戏,验证数据持久化(最底下有链接) 第一步:拉取镜像 [root@localhost docker-image]# docker load < httpd_img.tar. ...