码蹄集 BD202401 补给

2024-06-21 05:44
文章标签 码蹄集 补给 bd202401

本文主要是介绍码蹄集 BD202401 补给,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述
在这里插入图片描述
错误解法:简单将取半前后的综合排序后取最小值,这样没有考虑这样一种情况:取半的时机不对,也许取半某个大一点的P之后反而能进一步取一个补给点了呢??对不对。这样简单排序只不过是“最省钱”的一种,而不是数量最多的一种。

#include<bits/stdc++.h>
using namespace std;
#define  MAX 1005
typedef struct Node
{
int p;
int flag;
}NNode;
NNode node[2005];bool cmp(const NNode &a,const NNode &b) { // &表示引用
return (a.p <= b.p);
}
int main( )
{int count = 0;
int ans = 0;
int N,B;
cin>>N>>B;
int a,b;
for(int i=0;i<N;i++)
{
cin>>a>>b;
node[count].p = a+b;
node[count++].flag = 0;
node[count].p = a/2+b;
node[count++].flag = 1;
}
sort(node,node+2N,cmp);
int flag = 0;
count = 0;
for(int i=0;i<2N;i++)
{
if(flag == 1 && node[i].flag == 1)
{
continue;
}
if(B<node[i].p) break;
ans++;
B-=node[i].p;
if(node[i].flag == 1) flag = 1;
}
cout<<ans;
return 0;
}

正确思路(贪心):先按照不取半进行取,到无法容纳后一个时将先前最大值取半,进一步判断是否能容纳。贪心点在于使取半的收益最大:补给点数量能否加一

#include<bits/stdc++.h> 
using namespace std;
#define  MAX 1005
typedef struct Node
{int p;int s;int flag;
}NNode;
NNode node[2005];bool cmp(const NNode &a,const NNode &b) { // &表示引用return (a.p+a.s < b.p+b.s);
}
int main( )
{int count = 0;int ans = 0;int N;long long B;cin>>N>>B;int a,b;for(int i=0;i<N;i++){cin>>a>>b;node[count].p = a;node[count].s = b;node[count++].flag = 0;}sort(node,node+N,cmp);int flag = 0;int maxx = 0;for(int i=0;i<N;i++){if(B<node[i].p+node[i].s){if(flag == 0 && B+maxx/2 >= node[i].p+node[i].s) {flag = 1;ans++;B+=maxx/2;B=B - node[i].s - node[i].p;continue;}break;}B=B - node[i].s - node[i].p;maxx = max(maxx,node[i].p);ans++;}cout<<ans;return 0;
}

这篇关于码蹄集 BD202401 补给的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080360

相关文章

码蹄集部分题目(2024OJ赛9.4-9.8;线段树+树状数组)

1🐋🐋配对最小值(王者;树状数组) 时间限制:1秒 占用内存:64M 🐟题目思路 MT3065 配对最小值_哔哩哔哩_bilibili 🐟代码 #include<bits/stdc++.h> using namespace std;const int N=1e5+7;int a[N],b[N],c[N],n,q;struct QUERY{int l,r,id;}que

码蹄集部分题目(2024OJ赛8.28-9.1)

1🐋🐋都市路径(黄金;BFS) 时间限制:1秒 占用内存:64M 🐟题目思路 这道题目给的提示是使用BFS,但是使用Floyd更简单,也能过。 🐟代码 #include<bits/stdc++.h> using namespace std;int dp[105][105]={0};int main( ){int n,m,cur;cin>>n;for (int i = 1

码蹄集部分题目(2024OJ赛19期;贪心集训)

1🐋🐋水温调节(黄金;贪心) 时间限制:1秒 占用内存:128M 🐟题目思路 贪心思路:先将两只水龙头的流速开到最大,温度高了,就把热水的流速降低一个单位,温度低了就把冷水的流速降低一个单位,当任意一个水龙头的流速小于0时结束循环。 【码蹄集进阶塔全题解08】算法基础:贪心 MT2080 – MT2092_哔哩哔哩_bilibili 🐟代码#include<bits/stdc+

码蹄集部分题目(2024OJ赛18期;并查集+ST表+贪心)

1🐋🐋史莱姆融合(钻石;并查集) 时间限制:1秒 占用内存:128M 🐟题目描述 🐟题目思路 这道题目使用并查集,同一集合的所有元素的最顶上的祖父节点是统一的。这里记录每个集合的最左端元素(最顶上的祖父节点)和最右端元素,便于集合更新。 MT3052 史莱姆融合_哔哩哔哩_bilibili 🐟代码 #include<bits/stdc++.h> ​us

码蹄集部分题目(2024OJ赛11期)

1🐋🐋🐋银行账户(黄金;模拟) 时间限制:1秒 占用内存:128M 🐟题目描述 据说对银行账户进行盗窃时,如果只盗取小数点下的数值,就不容易引起注意,所以你决定进行尝试。 银行总共有n个账户,m次转账,对每次转账,你可以盗取(转账金额-转账金额下取整)的资金,并使转入账户的警戒值增加相同数值,当任意账户的警戒值>1,或者无法实现转账 (转出账户余额不足),或者m次转账全部完成,你

码蹄集——购买数字(附完整代码)

一.具体题目如下: 二.本题难点 1.可输入数字过大,超出了int型数据的范围;(因此无法计算不超过n的最大回文数进而得出答案),同样的输出数值也过大无法用int型变量直接输出。 2.输入有前导零,即如果n=989,则可以输入”000989“。(因此无法直接获得n的实际数值) 三.针对难点的解决办法 针对难点1:可将输入数据用字符数组(本题中命名为str[])来接收;输出也可以用数

【码蹄集新手村 600 题】逻辑思维题

题目链接:   解题思路: 此类关于逻辑思维的题目, 在程序设计题目里非常常见, 做法也非常通用, 就是列举所有可能的情况, 然后根据筛选条件把不符合条件的情况筛选掉, 剩下的就是我们要求的解。 需要注意的是: 根据生活常识以及比赛常识, 俩个人不能匹配到同样的对手, 所以要保证其匹配结果的唯一性, 即 i,j,k 三个数不可能相同。 参考代码: #incl

算法竞赛入门【码蹄集新手村600题】(MT1020-1040)C语言

算法竞赛入门【码蹄集新手村600题】(MT1020-1040)C语言 目录MT1021 %f格式符MT1022 小数、指数MT1023 进制乱炖MT1024 进制形式MT1025 八、十六进制MT1026 合并MT1027 整数逆序MT1028 四位数逆序MT1029 位数MT1030 最大公约数MT1031 最简分数MT1032 最小公倍数MT1033 多项式计算MT1034 偶数平方MT

力扣宝石补给

欢迎各位勇者来到力扣新手村,在开始试炼之前,请各位勇者先进行「宝石补给」。 每位勇者初始都拥有一些能量宝石, gem[i] 表示第 i 位勇者的宝石数量。现在这些勇者们进行了一系列的赠送,operations[j] = [x, y] 表示在第 j 次的赠送中 第 x 位勇者将自己一半的宝石(需向下取整)赠送给第 y 位勇者。 在完成所有的赠送后,请找到拥有最多宝石的勇者和拥有最少宝石的勇者,并返

【优化求解】基于matlab遗传算法求解岛屿物资补给优化问题【含Matlab源码 172期】

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。 🍎个人主页:海神之光 🏆代码获取方式: 海神之光Matlab王者学习之路—代码获取方式 ⛳️座右铭:行百里者,半于九十。 更多Matlab仿真内容点击👇 Matlab图像处理(进阶版) 路径规划(Matlab) 神经网络预测与分类(Matlab) 优化求解(Matlab) 语音处理(Matlab