1072: 花生采摘

2023-12-25 11:08
文章标签 花生 1072 采摘

本文主要是介绍1072: 花生采摘,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Description

鲁宾逊先生有一只宠物猴,名叫多多。这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!——熊字”。

鲁宾逊先生和多多都很开心,因为花生正是他们的最爱。在告示牌背后,路边真的有一块花生田,花生植株整齐地排列成矩形网格(如图1)。有经验的多多一眼就能看出,每棵花生植株下的花生有多少。为了训练多多的算术,鲁宾逊先生说:“你先找出花生最多的植株,去采摘它的花生;然后再找出剩下的植株里花生最多的,去采摘它的花生;依此类推,不过你一定要在我限定的时间内回到路边。”

我们假定多多在每个单位时间内,可以做下列四件事情中的一件:

1) 从路边跳到最靠近路边(即第一行)的某棵花生植株;

2) 从一棵植株跳到前后左右与之相邻的另一棵植株;

3) 采摘一棵植株下的花生;

4) 从最靠近路边(即第一行)的某棵花生植株跳回路边。

现在给定一块花生田的大小和花生的分布,请问在限定时间内,多多最多可以采到多少个花生?注意可能只有部分植株下面长有花生,假设这些植株下的花生个数各不相同。

例如在图2所示的花生田里,只有位于(2, 5), (3, 7), (4, 2), (5, 4)的植株下长有花生,个数分别为13, 7, 15, 9。沿着图示的路线,多多在21个单位时间内,最多可以采到37个花生。

Input

有多组测试样例,每组输入的第一行包括三个整数,M, N和K,用空格隔开;表示花生田的大小为M * N(1 <= M, N <= 20),多多采花生的限定时间为K(0 <= K <= 1000)个单位时间。接下来的M行,每行包括N个非负整数,也用空格隔开;第i + 1行的第j个整数Pij(0 <= Pij <= 500)表示花生田里植株(i, j)下花生的数目,0表示该植株下没有花生。

Output

对应每组输入,输出在限定时间内,多多最多可以采到花生的个数。

Sample Input

6 7 21
0 0 0 0 0 0 0
0 0 0 0 13 0 0
0 0 0 0 0 0 7
0 15 0 0 0 0 0
0 0 0 9 0 0 0
0 0 0 0 0 0 0

Sample Output

37

Note:

采摘顺序:15, 13, 9, 7

定义二维数组,下标 i, j 从1开始输入(方便计算距离),起点 (0, 0)。a[4][2] = 15,在路边时,可以不计水平距离,直接走到  (0, 2) 位置,入田。

思路: 

①找目前最大的; 

②结束条件:时间耗光或者采摘完毕(全0); 

③记录花生数,清除已采摘的花生,递归查找下一个最大点;

判断下一次采摘的时间是否足够方案:

起点到终点需要走过的距离 + 终点与路边距离 + 采摘时间1 = 成功采摘至少需要耗费的时间

#include <stdio.h>
#include <stdlib.h>int m, n, k, i, j, a[25][25], nx, ny, nt, max, total=0;
void search(int x, int y, int k);int main()
{scanf("%d %d %d", &m, &n, &k);for(i=1; i<=m; i++)for(j=1; j<=n; j++)scanf("%d", &a[i][j]);search(0, 0, k);    //起点(0,0)printf("%d", total);return 0;
}void search(int x, int y, int k)// x,y是坐标,k是当前还剩多少时间
{max = -1;                   //初始化for(i=1; i<=m; i++)for(j=1; j<=n; j++){if(a[i][j] > max){max = a[i][j];  //拿到当前最大,并记下坐标nx = i;ny = j;}}if(x==0)y=ny;   //起点x为0,从路边开始,不计水平移动时间//abs是需要走过的距离,+nx是返程时间,+1是采摘时间nt = abs(nx-x) + abs(ny-y) + nx + 1;if(k<nt || a[nx][ny] == 0)//边界(没时间了或者采摘完毕(全0))return;else{total += a[nx][ny];   //加上这个位置的花生数a[nx][ny] = 0;        //花生数变为0search(nx, ny, k-abs(nx-x)-abs(ny-y)-1);//导入目前的坐标,减去本次所用的时间}
}

 

这篇关于1072: 花生采摘的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

nyoj 1072 我想回家

一道相当题目描述相当扯的题。 这道题目的描述最后说的是求出到达最后一个点的最短距离,所以输入数据最后输入的城堡的坐标是没用的。 就是先求出两点之间的距离,若不大于村落间距离,并且不大于最后的距离限制 l ,则在两点间建边。 最后任意方法求出最短路即可。 #include <iostream>#include<stdio.h>#include<vector>#include<

1072:找规律填数字

题目描述 小宇正在读小学,今天老师布置了几道数学题目。小宇平时上课经常不专心,这些他可发愁了,怎么办呢?看看你能不能帮帮他。 题目是给你一组有规律序列的前面5个整数,请你给出它后面跟着的5个整数,如:1,2,3,4,5,___,___,___,__,___。这是个等差数列,后面应该是6,7,8,9,10,就这么简单。而且现在小宇已经知道这串序列要么是等差数列,要么是等比数列或者是斐波那契数列。

助力樱桃智能自动化采摘,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建果园种植采摘场景下樱桃成熟度智能检测识别系统

随着科技的飞速发展,人工智能(AI)技术已经渗透到我们生活的方方面面,从智能家居到自动驾驶,再到医疗健康,其影响力无处不在。然而,当我们把目光转向中国的农业领域时,一个令人惊讶的事实映入眼帘——在这片广袤的土地上,农业生产仍然大量依赖人力,而非智能机械化。与此同时,国外的农业生产模式早已进入全面机械化的新时代。面对这一现状,我们不禁要思考:如何将AI技术融入农业,引领农业生产走向数字化、智能化?

Coder Buct 1072: 数据结构作业(可选)-- 约瑟环问题

题目描述 将m个孩子从1到m编上号,按序号围坐成一个圈,从1号孩子开始数,每数到n时,被数到的孩子即离开圈子,然后从下一个孩子开始,再从1开始数,如此不断地数下去,只到只剩下最后一个孩子,问剩下的孩子是几号? 输入 输入为一组整数对,每个整数对占一行,整数对的第一个整数表示m,即孩子的个数,第二个整数表示n,即被数到n的孩子将离开。 0<m<10000, n>0 输入以0 0作为结束

lightoj 1072 Calm Down | 二分

与lightoj 1048 基本一样,不过是这题是弱化版,不用输出方案。 http://blog.csdn.net/u011580493/article/details/38958267 #include <cstdio>#include <cstring>#include <cstdlib>#include <iostream>#include <algorithm>usin

助力草莓智能自动化采摘,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建果园种植采摘场景下草莓成熟度智能检测识别系统

随着科技的飞速发展,人工智能(AI)技术已经渗透到我们生活的方方面面,从智能家居到自动驾驶,再到医疗健康,其影响力无处不在。然而,当我们把目光转向中国的农业领域时,一个令人惊讶的事实映入眼帘——在这片广袤的土地上,农业生产仍然大量依赖人力,而非智能机械化。与此同时,国外的农业生产模式早已进入全面机械化的新时代。面对这一现状,我们不禁要思考:如何将AI技术融入农业,引领农业生产走向数字化、智能化?

ICRA 2024:北京工业大学马楠教授联合中科原动力公司推出番茄采摘自主机器人AHPPEBot,实现32.46秒快速准确采摘

当前,农业生产正深受劳动力短缺困扰,这一现状对生产规模的进一步拓展构成了严重制约。为了突破这一瓶颈,实施自动化已成为提升农业生产力的关键途径,这也使得机器人采收技术备受关注。 现今的机器人采收系统普遍采用先进感知方法,并结合精密收获程序来完成作业。具体而言,它们借助监督学习技术,精准地将作物成熟度划分为可收获与不可收获两类。在检测完毕后,系统会利用分割模型捕捉目标作物的点云数据,进而拟合出球

2004NOIP普及组真题 2. 花生采摘

线上OJ: 【04NOIP普及组】花生采摘 核心思想: 1、本题为贪心即可。 2、因为本题严格限制了顺序,所以先把每个节点的花生数量按降序排序。然后逐一判断下一个花生是否需要去采摘即可 3、每一次采摘完,记录耗时 t 以及采集的花生总数 ans。同时考虑排序后的下一个节点,如果采摘后返回路边时间足够,则执行下一次采摘;如果采摘后来不及返回路边,则不再进行下一次采摘,本次直接返回路边即可。

TZOJ 1072: 编辑距离(动态规划)

1072: 编辑距离 时间限制(普通/Java):1000MS/10000MS     内存限制:65536KByte 总提交: 917            测试通过:275 描述 假设字符串的基本操作仅为:删除一个字符、插入一个字符和将一个字符修改成另一个字符这三种操作。 我们把进行了一次上述三种操作的任意一种操作称为进行了一步字符基本操作。 下面我们定义两个字符串的编辑距离

1072 是否闰年

#include<iostream>using namespace std;int main(){int n;cin>>n;if((n%400==0)||(n%4==0&&n%100!=0))cout<<"yes"<<endl;elsecout<<"no"<<endl;return 0;}