2198: 小P当志愿者送餐
题目描述
在ICPC程序设计大赛期间,小P作为志愿者的任务是给各个学校送盒饭,小P一次最多可以携带M份盒饭。总共有N个学校来参加比赛,这N个学校的休息点在一条笔直的马路边一字排开,路的一头是小P取盒饭的地方,假设为原点,每两个相邻点之间,小明需要行走15秒,包括从原点到第一个休息点,交付一份盒饭需要3秒时间。从第一个休息点到第N个休息点需要的盒饭数分别为 a1, a2, a3..., an。 问小P最短需要多少时间把全部盒饭送完并回到原点。
输入
第一行输入一个正整数T,表示有T组测试数据,每组占两行,第一行两个整数M、N(0<M,N<50),第二行输入N个整数a1 a2 a3 ...an (0<=a1....an<50)
输出
每行输出一个整数,对应一组测试数据,表示小P送完全部盒饭并返回原点的总时间(秒)。
样例输入 Copy
2
18 2
8 6
10 3
5 0 8
样例输出 Copy
102
159
提示
消耗的时间最少只由走的路程最短决定,每一趟来回走的路程是这一次送餐的最远的点距离原点的两倍。
我的错误:
//M份盒饭。 总共有N个学校来参加比赛
//每两个相邻点之间,小明需要行走15秒
//交付一份盒饭需要3秒时间
//102=15*(n*2)+(A1+A2+An)*3
//a1 a2 a3 a4
#include<iostream>
using namespace std;
int main() {
int t,n,sum=,book,a,b,i,j;//book表示手里拿的东西 t表示时间
cin>>n;//几组数据
while(n--){
cin>>a>>b;
int arr[b];
book=a;
t=;
sum=;
for( i=;i<b;i++) {
cin>>arr[i];
sum+=arr[i];} for(j=b-;j>=;j--){
book=book-arr[j];
while(book<=){
if(i==&&book==) break;
t+=(j+)**;
book=book+a;
}
}
t=t+b**+sum*;
cout<<t<<endl;
} }
错误分析主要是送最远的饭的目标寻找没考虑,考虑后正确
//M份盒饭。 总共有N个学校来参加比赛
//每两个相邻点之间,小明需要行走15秒
//交付一份盒饭需要3秒时间
//102=15*(n*2)+(A1+A2+An)*3
//a1 a2 a3 a4
#include<iostream>
using namespace std;
int main() {
int t,n,sum=,book,a,b,i,j,q;//book表示手里拿的东西 t表示时间
cin>>n;//几组数据
while(n--){
cin>>a>>b;
int arr[b];
book=a;
t=;
sum=;
for( i=;i<b;i++) {
cin>>arr[i];
sum+=arr[i];
if(arr[i]>) q=i;
} for(j=q;j>=;j--){
book=book-arr[j];
while(book<){
t+=(j+)**;
book=book+a;
}
}
t=t+(q+)**+sum*;
cout<<t<<endl;
} }
同学用的贪心算法:
#include <stdio.h>
#include <bits/stdc++.h>
using namespace std;
typedef long long ll; const int INF = 0x3f3f3f3f;
const ll LINF = 0x3f3f3f3f3f3f3f3f;
const int N = ;
int a[N]; int main()
{
#ifdef LOCAL
freopen("C:/input.txt", "r", stdin);
#endif
int T;
cin >> T;
while (T--)
{
int m, n, p = ; //p最后一个有效点
scanf("%d%d", &m, &n);
ll ans = ;
for (int i = ; i <= n; ++i)
{
scanf("%d", &a[i]);
if (a[i])
p = i;
}
while (p)
{
ans += p * ; //到p再回原点代价
int t = m; //身上所带物品
while (p && t)
{
int e = min(t, a[p]); //交付
t -= e;
a[p] -= e;
ans += e * ; //交付代价
while (p && !a[p]) //如果当前点已经送完则移动p
p--;
}
}
printf("%lld\n", ans);
} return ;
}
分析:
1.从远往近送,
2.确定的最远点需要送餐,arr[i]>0
3.贪心问题,e=min(arr[j],book),很重要
自己实现,差不多,
//M份盒饭。 总共有N个学校来参加比赛
//每两个相邻点之间,小明需要行走15秒
//交付一份盒饭需要3秒时间
//102=15*(n*2)+(A1+A2+An)*3
//a1 a2 a3 a4
#include<iostream>
using namespace std;
int main() {
int t,n,sum=,book,a,b,i,j,p,e;//book表示手里拿的东西 t表示时间
cin>>n;//几组数据
while(n--){
cin>>a>>b;
int arr[b];
book=a;
t=;
sum=;
for( i=;i<b;i++) {
cin>>arr[i];
sum+=arr[i];
if(arr[i]) p=i;
} for(j=p;j>=;j--){
e=min(arr[j],book);
book-=e;
arr[j]-=e;
while(arr[j]>){
t+=(j+)**;
book=a;
e=min(arr[j],book);
book-=e;
arr[j]-=e;
}
}
t=t+(p+)**+sum*;
cout<<t<<endl;
} }
2198: 小P当志愿者送餐的更多相关文章
- 在没有APP的125年前 印度的外卖小哥是这样送餐
说到印度,你想到的是什么?咖喱.歌舞剧.开挂的火车?通通不是,我今天要说的是他们的外卖小哥,在印度如同"神"一般的存在.其实印度人不叫这批人为外卖小哥,而称他们为dabbawala ...
- 微信小程序--消息推送配置Token令牌错误校验失败如何解决
微信开放第三方API接口, 申请地址: https://mp.weixin.qq.com/advanced/advanced?action=interface&t=advanced/inter ...
- 【状压dp】送餐员
[odevs2800]送餐员 题目描述 Description 有一个送外卖的,他手上有n份订单,他要把n份东西,分别送达n个不同的客户的手上.n个不同的客户分别在1~n个编号的城市中.送外卖的从0号 ...
- Java实现 微信小程序 + 消息推送
实现效果: 下面要显示五个字段 接下来,参照官方文档,一步步实现: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open- ...
- 抓到Dubbo异步调用的小BUG,再送你一个贡献开源代码的机会
hello,大家好呀,我是小楼. 最近一个技术群有同学at我,问我是否熟悉Dubbo,这我熟啊~ 他说遇到了一个Dubbo异步调用的问题,怀疑是个BUG,提到BUG我可就不困了,说不定可以水,哦不.. ...
- 微信小程序消息推送,前端操作
<form bindsubmit="getFormId" report-submit="true"> <button form-type=&q ...
- luogu P1608 路径统计
题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方,而且他们目前处在标注为 ...
- 洛谷——P1608 路径统计
P1608 路径统计 题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方, ...
- 洛谷 P1608 路径统计
P1608 路径统计 题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方, ...
随机推荐
- Elasticsearch拼音分词和IK分词的安装及使用
一.Es插件配置及下载 1.IK分词器的下载安装 关于IK分词器的介绍不再多少,一言以蔽之,IK分词是目前使用非常广泛分词效果比较好的中文分词器.做ES开发的,中文分词十有八九使用的都是IK分词器. ...
- VS2017 + QT5 + C++开发环境搭建和计算器Demo测试
非常有帮助的参考资料: https://blog.csdn.net/gaojixu/article/details/82185694 该参考文献的主要流程: (1)QT下载安装:从官网下载QT,并记 ...
- 【项目 · Wonderland】立项报告
[软件工程实践 · 团队项目] 第二次作业 团 队 作 业 原 文:http://www.cnblogs.com/andwho/p/7598662.html Part 0 · 简 要 目 录 Part ...
- IE在开发工具启动的情况下(打开F12)时 JS才能执行
在开发一个项目时遇到一个bug:在360急速浏览器的兼容模式下并且是线上环境时js无法执行(360急速浏览器的兼容模式下测试环境就ok), 打开f12以后刷新就没问题了,查了一下网上说的IE6/7是没 ...
- 如何学习sss和前端数据处理
1.学习scss,就看这篇:http://www.ruanyifeng.com/blog/2012/06/sass.html 就够了,因为sass的出现本来就是为了简化工作提高效率,也不算什么深奥精妙 ...
- JS页面打印
平常浏览网页和文档的时候,随处可见打印两个字,有时候不小心点到或者快捷键触发到,就会弹出一个打印的页面,上边显示的打印机是GoldGrid Virtual Printer,这是计算机的虚拟打印机,打印 ...
- MySQL高级知识(十二)——全局查询日志
前言:全局查询日志用于保存所有的sql执行记录,该功能主要用于测试环境,在生产环境中永远不要开启该功能. 1.如何开启 #1.通过my.cnf配置开启该功能. 注:对my.cnf文件配置后,需重启my ...
- MySQL高级知识(八)——ORDER BY优化
前言:在使用order by时,经常出现Using filesort,因此对于此类sql语句需尽力优化,使其尽量使用Using index. 0.准备 #1.创建test表. drop table i ...
- Spring中事务配置以及事务不起作用可能出现的问题
前言:在Spring中可以通过对方法进行事务的配置,而不是像原来通过手动写代码的方式实现事务的操作,这在很大程度上减少了开发的难度,本文介绍Spring事务配置的两种方式:基于配置文件的方式和基于注解 ...
- [TJOI2018]碱基序列
嘟嘟嘟 现在看到字符串就想到SAM,所以很担心kmp啥的会不会忘了-- 这题感觉挺暴力的:首先当然要把\(s\)建成SAM,然后令\(dp[i][j]\)表示到第\(i\)组时,SAM上节点\(j\) ...