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个地方, ...
随机推荐
- [20190312]关于增量检查点的疑问(补充).txt
[20190312]关于增量检查点的疑问(补充).txt --//有人问我以前写一个帖子的问题,关于增量检查点的问题,链接如下:http://blog.itpub.net/267265/viewspa ...
- Android ConstraintLayout 布局警告
使用 ConstraintLayout 布局出现警告: 此视图不受垂直约束.在运行时,除非添加垂直约束,否则它将跳转到左侧 解决办法: 从Android Studio v3及更高版本开始,从下拉列表中 ...
- Linux CFS调度器之虚拟时钟vruntime与调度延迟--Linux进程的管理与调度(二十六)
1 虚拟运行时间(今日内容提醒) 1.1 虚拟运行时间的引入 CFS为了实现公平,必须惩罚当前正在运行的进程,以使那些正在等待的进程下次被调度. 具体实现时,CFS通过每个进程的虚拟运行时间(vrun ...
- ASP.NET -- 一般处理程序ashx
ASP.NET -- 一般处理程序ashx 如果在一个html页面向服务器端请求数据,可用ashx作为后台页面处理数据.ashx适合用作数据后台处理,相当于WebForm中的aspx.cs文件或 ...
- Java入门(一):Hello World !
前言 从今天开始,准备写Java Web开发的系列文章,毕竟自己主攻的还是Java方向,Python只是业余学习的兴趣使然,在第二技能还没有培养成熟前,做好第一技能的巩固和提高是很有必要的.从正式入行 ...
- Lingo求解线性规划案例2——多阶段投资问题
凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 某公司现有资金30万元可用于投资,5年内有下列方案可供采纳: 1号方案:在年初投资1元,2年后可收回1. ...
- .Net环境下调用ProtoBuf
一.什么是ProtoBuf protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台.它是一种类似于xml.json等类似作用的交互格式.由于它是一种 ...
- android studio 定位具体的错误原因
编译一个数据监测APP的时候出现了报错: Error:Compilation failed; see the compiler error output for details. 在网上查到方法如下: ...
- java读取properties中文乱码
1 确认properties文件的编码是utf-8 2 采用流的方式读取文件,设置编码为utf-8 public class ErrorCodeConfig { static Properties p ...
- multiply对应位置相乘 与 dot矩阵乘
区别 # -*- coding: utf- -*- import numpy as np a = np.array([[,], [,]]) b= np.arange().reshape((,)) c ...