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个地方, ...
随机推荐
- [20190305]删除审计登录信息不适合使用logrotate.txt
[20190305]删除审计登录信息不适合使用logrotate.txt --//生产系统数据库sys用户登录会在/u01/app/oracle/admin/${ORACLE_SID}/adump/目 ...
- onclick="return function()"的使用情况
根据function的返回值,进行下一步操作,当返回值为true时,进行下一步操作,当返回值为false时,不进行操作. 例如:当在 <a href="url" onclic ...
- SqlServer2017下载地址
https://www.microsoft.com/zh-CN/download/details.aspx?id=55994
- 动态Linq表达式生成
动态构建 WHERE(C=>C.Id=Value): public static IQueryable<T> WhereEqual<T>(this IQueryable& ...
- SSH File Transfer遇到错误"too many authentication failures for root".A protocol error was detected......
在SSH Secure Shell 连接Linux centos的时候,遇到F-Secure SSH File Transfer错误"too many authentication fai ...
- Excel 单元格不能设置超链接
最近在重做系统后 新安装office后 原先的Excel中设置的超链接不能正常使用了 如果新配置的超链接也不能使用 解决方法: 步骤1:打开开始菜单,在运行里输入regedit,回车 步骤2 在 ...
- PAT乙级题:1003我要通过!
#include <iostream> #include <string> #include <vector> #include <algorithm> ...
- 《数据库技术基础与应用(第2版)》学习笔记——第7章~
从这章开始,操作的内容开始增多,概念的东西越来越少,可能跟学校的教学目的有关,但是跟我的学习目的不匹配,就不再继续整理. 总结:这本书适合大学本科生学习和了解数据库的相关知识以及Access和SQL ...
- vue源码分析—数据绑定
放进沙里附件拉萨就发牢骚:剑飞:啊撒
- ES5-ES6-ES7_字符串扩展—模板字符串
includes(), startsWith(), endsWith() 传统上,JavaScript只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中.ES6又提供了三种新方法 ...