题目描述
在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当志愿者送餐的更多相关文章

  1. 在没有APP的125年前 印度的外卖小哥是这样送餐

    说到印度,你想到的是什么?咖喱.歌舞剧.开挂的火车?通通不是,我今天要说的是他们的外卖小哥,在印度如同"神"一般的存在.其实印度人不叫这批人为外卖小哥,而称他们为dabbawala ...

  2. 微信小程序--消息推送配置Token令牌错误校验失败如何解决

    微信开放第三方API接口, 申请地址: https://mp.weixin.qq.com/advanced/advanced?action=interface&t=advanced/inter ...

  3. 【状压dp】送餐员

    [odevs2800]送餐员 题目描述 Description 有一个送外卖的,他手上有n份订单,他要把n份东西,分别送达n个不同的客户的手上.n个不同的客户分别在1~n个编号的城市中.送外卖的从0号 ...

  4. Java实现 微信小程序 + 消息推送

    实现效果: 下面要显示五个字段 接下来,参照官方文档,一步步实现: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open- ...

  5. 抓到Dubbo异步调用的小BUG,再送你一个贡献开源代码的机会

    hello,大家好呀,我是小楼. 最近一个技术群有同学at我,问我是否熟悉Dubbo,这我熟啊~ 他说遇到了一个Dubbo异步调用的问题,怀疑是个BUG,提到BUG我可就不困了,说不定可以水,哦不.. ...

  6. 微信小程序消息推送,前端操作

    <form bindsubmit="getFormId" report-submit="true"> <button form-type=&q ...

  7. luogu P1608 路径统计

    题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方,而且他们目前处在标注为 ...

  8. 洛谷——P1608 路径统计

    P1608 路径统计 题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方, ...

  9. 洛谷 P1608 路径统计

    P1608 路径统计 题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方, ...

随机推荐

  1. 一、Tableau基础

    有关函数的官方文档:https://onlinehelp.tableau.com/current/pro/desktop/zh-cn/functions_functions_string.htm 注意 ...

  2. org.hibernate.NonUniqueObjectException

    错误如下: 2017-3-29 15:17:52~ERROR~org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV ...

  3. Windows Server 2016-域站点复制查询

    了解了有关站点复制概念性内容后,后续几章节我们会围绕站点复制相关内容对域控的日常复制.维护等进行简单介绍.本章为大家带来有关域控站点复制查询的相关内容,希望大家可以喜欢.站点内域控制器之间的复制拓扑由 ...

  4. 本博客停止更新改用wordperss

    http://www.azurew.com/ 还是能有自己的博客比较爽 哈哈哈

  5. 一个好看的php验证码源码

    <?php     $w = 80; //设置图片宽和高 $h = 26; $str = Array(); //用来存储随机码 $string = "ABCDEFGHIJKLMNOPQ ...

  6. 【PAT】B1012 数字分类

    注意逻辑的描述,只要认真看题,就能做对,如果自己结果一直不正确,请仔细推一下样例结果 #include<stdio.h> int arr[1005]; int main(){ int N, ...

  7. hashcode相等两个类一定相等吗?equals呢?相反呢?

    hashCode相等,equals也不一定相等, 两个类也不一定相等 equals相同, 说明是同一个对象, 那么hashCode一定相同 哈希表是结合了直接寻址和链式寻址两种方式,所需要的就是将需要 ...

  8. win21api、win32gui、win32con三个模块操作系统窗口时一些小技巧

    下面这段脚本是操作一个浏览器上弹窗,打开文件窗口,由于脚本 执行速度快,当时未添加第2行的延时时,脚本顺利的执行成功,但弹的窗却没有进行操作,建议后续如果脚本执行到打开弹窗时,延时个几秒再去操作所弹窗 ...

  9. 微信小程序多层嵌套循环,二级数组遍历

    小程序中的遍历循环类似于angularJS的遍历. 二级数组遍历有一个坑.二级遍历wx:for循环的时候,需要注意.(代码如下) JS代码: data: { groups: [ [ { title: ...

  10. 【CQOI2012】局部极小值

    [CQOI2012]局部极小值 Description 有一个\(n\)行\(m\)列的整数矩阵,其中\(1\)到\(nm\)之间的每个整数恰好出现一次.如果一个格子比所有相邻格子(相邻是指有公共边或 ...