采草(动态规划)

先说说我的思路吧

下面是部分聊天记录

赤坂    龍之介 2023/12/22 11:06:04
就像我之前说的那样,我把每一个药草的价值除以时间,得出了新的价值评估标准:采摘这个药草时,每分钟的价值

赤坂    龍之介 2023/12/22 11:07:00
然后排序,按照每分钟价值从高到低排,若相等,则按时间从高到低排

赤坂    龍之介 2023/12/22 11:07:10
从前往后递归

赤坂    龍之介 2023/12/22 11:07:28
第一个只要不超过时间,就是必选的

赤坂    龍之介 2023/12/22 11:08:12
第一个选完之后在剩下的里面选,同样也是剩下的第一个只要不超过剩余时间,也是必选的

赤坂    龍之介 2023/12/22 11:08:25
但是得考虑到时间利用率的问题

赤坂    龍之介 2023/12/22 11:08:44
如你只有70分钟

赤坂    龍之介 2023/12/22 11:09:24
药草1:4块,2分钟

赤坂    龍之介 2023/12/22 11:09:42
药草2:3块,两分钟

赤坂    龍之介 2023/12/22 11:10:09
药草3:68块,68分钟

赤坂    龍之介 2023/12/22 11:10:24
很明显是选2和3是最高的

赤坂    龍之介 2023/12/22 11:10:29
1和3

赤坂    龍之介 2023/12/22 11:10:51
但是按照上面的思路,你选完2就不能选3了,因为超时

赤坂    龍之介 2023/12/22 11:11:17
所以在第二次选的时候仍然往下看,有没有要选的

赤坂    龍之介 2023/12/22 11:11:44
只有价值高于当前价值才可以换第二次选的药草

赤坂    龍之介 2023/12/22 11:13:29
因为下面的药草每分钟的价值都比较低,如果价值低于当前药草的价值,就不值得选

赤坂    龍之介 2023/12/22 11:14:49
还有一个简单的剪枝:如果下面的药草的每分钟价值乘剩下的时间加上之前的价值仍然低于目前的最高的价值,结束这一轮的筛选

算是一个不断选择最优的策略

但是得考虑到时间利用率,虽然设置了一个目前最大的时间利用率值,但是鉴于递归的特点(只能看到目前和部分预测下一步,无法考虑到全局),还是无法完全兼顾所有的情况,离最优总是差一点点,只能快速地求“次优”

所以WA了

只要解决时间利用率的问题,这个算法几乎可以称得上完美

但是我想不出来

代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
typedef struct Herb{int t;int v;double v_t;
}Herb;
int cmp(const void * a, const void * b);
void dg(int l_t, int id, int value);
int T, M, maxn, min_l_t;
const double EPS = 1e-6;
Herb herb[100];int main(void)
{scanf("%d%d", &T, &M);min_l_t = T;for(int i = 0; i < M; i++){scanf("%d%d", &herb[i].t, &herb[i].v);herb[i].v_t = 1.0 * herb[i].v / herb[i].t;}qsort(herb, M, sizeof(Herb), cmp);dg(T, -1, 0);printf("%d", maxn);return 0;
}
int cmp(const void * a, const void * b)
{if(((Herb *)a)->v_t - ((Herb *)b)->v_t > EPS)return -1;else if(fabs(((Herb *)a)->v_t - ((Herb *)b)->v_t) <= EPS && ((Herb *)a)->t > ((Herb *)b)->t)return -1;return 1;
}
void dg(int l_t, int id, int value)
{int tmp_v = 0;maxn = (maxn > value) ? maxn : value;min_l_t = (min_l_t < l_t) ? min_l_t : l_t;for(int i = 1; i < M - id; i++)if((herb[id + i].v > tmp_v || l_t - herb[id + i].t < min_l_t) && herb[id + i].t <= l_t && (l_t * herb[id + i].v_t + value) - 1.0 * maxn > EPS){tmp_v = herb[id + i].v;dg(l_t - herb[id + i].t, id + i, value + herb[i + id].v);}return;
}


有想出来的大佬教我一下

接下来就是动态规划了

我是没想出来,问我这题的那个people自己想出来了,我就看着他的代码偷师

他的代码如下:

#include<iostream>
#include<string.h>
#include<cmath>
#include<algorithm>
#include<iomanip>
using namespace std;
int t, m;
int i, j;
int spend[100]{}, value[100]{};
int most_value = 0;
int dp[1000][100];
bool w[1000][100]{};
int culc(int left_time, int i) {if (w[left_time][i]) {return dp[left_time][i];}if (i >= m) {return 0;}int j;int temp;int mm = 0;for (j = i; j < m; j++) {if (spend[j] <= left_time) {dp[left_time - spend[j]][j + 1] = culc(left_time - spend[j], j + 1);w[left_time - spend[j]][j + 1] = 1;temp = dp[left_time - spend[j]][j + 1] + value[j];if (temp > mm) {mm = temp;}}}return mm;
}
int main() {cin >> t >> m;for (i = 0; i < m; i++) {cin >> spend[i] >> value[i];}cout << culc(t, 0) << endl;
}

(引用此代码已获得作者的许可)

虽然不知道是部分引用还是全部引用(乐)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/241785.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023年小型计算机视觉总结

在过去的十年中&#xff0c;出现了许多涉及计算机视觉(CV)的项目&#xff0c;无论是小型的概念验证项目还是更大规模的生产应用。应用计算机视觉的方法是相当标准化的: 1、定义问题(分类、检测、跟踪、分割)、输入数据(图片的大小和类型、视野)和类别(正是我们想要的) 2、注释…

Python算法例27 对称数

1. 问题描述 对称数是一个旋转180后&#xff08;倒过来&#xff09;看起来与原数相同的数&#xff0c;找到所有长度为n的对称数。 2. 问题示例 给出n2&#xff0c;返回[&#xff02;11&#xff02;&#xff0c;&#xff02;69&#xff02;&#xff0c;&#xff02;88&#x…

详解Vue3中的基础路由和动态路由

本文主要介绍Vue3中的基础路由和动态路由。 目录 一、基础路由二、动态路由 Vue3中的路由使用的是Vue Router库&#xff0c;它是一个官方提供的用于实现应用程序导航的工具。Vue Router在Vue.js的核心库上提供了路由的功能&#xff0c;使得我们可以在单页应用中实现页面的切换、…

QT编写应用的界面自适应分辨率的解决方案

博主在工作机上完成QT软件开发&#xff08;控件大小与字体大小比例正常&#xff09;&#xff0c;部署到客户机后&#xff0c;发现控件大小与字体大小比例失调&#xff0c;具体表现为控件装不下字体&#xff0c;即字体显示不全&#xff0c;推测是软件不能自适应分辨率导致的。 文…

C/C++ 共用体union的应用和struct不同

共用体union是一种数据格式&#xff0c;它能够存储不同的数据类型&#xff0c;但只能同时存储其中的一种类型。也就是说&#xff0c;结构体同时存储int、long和double,共用体只能春初int、long或double,共用体的语法与结构体相似&#xff0c;但含义不同。例如下面的声明&#x…

基于javaSpringbootmysql的小型超市商品展销系统01635-计算机毕业设计项目选题推荐(免费领源码)

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作…

【SpringCloud】-GateWay源码解析

GateWay系列 【SpringCloud】-GateWay网关 一、背景介绍 当一个请求来到 Spring Cloud Gateway 之后&#xff0c;会经过一系列的处理流程&#xff0c;其中涉及到路由的匹配、过滤器链的执行等步骤。今天我们来说说请求经过 Gateway 的主要执行流程和原理是什么吧 二、正文 …

【教3妹学编程-算法题】收集足够苹果的最小花园周长

3妹&#xff1a;“在小小的花园里面挖呀挖呀挖&#xff0c;种小小的种子开小小的花” 2哥 : 3妹也会唱这首儿歌呀&#xff0c; 这首儿歌在五一期间很火啊。 3妹&#xff1a;是呀&#xff0c; 小朋友们都喜欢唱&#xff0c;我这个200多个月的大朋友也喜欢唱&#xff0c;哈哈 2哥…

仅操作一台设备,如何实现本地访问另一个相同网段的私网?

正文共&#xff1a;1034 字 8 图&#xff0c;预估阅读时间&#xff1a;4 分钟 书接上文&#xff08;地址重叠时&#xff0c;用户如何通过NAT访问对端IP网络&#xff1f;&#xff09;&#xff0c;我们已经通过两台设备的组合配置实现了通过IP地址进行访问。但一般场景中&#xf…

爬虫工作量由小到大的思维转变---<第二十三章 Scrapy开始很快,越来越慢(医病篇)>

诊断篇https://blog.csdn.net/m0_56758840/article/details/135170994?ops_request_misc%257B%2522request%255Fid%2522%253A%2522170333243316800180644102%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id1703332433168001806441…

C/C++ 连接访问 MySQL数据库

前面我们已经讲述了MySQL的基础使用&#xff0c;现在我们来看一下如何使用语言来操作数据库。在实际开发中&#xff0c;语言连接MySQL是为了能够在编程语言中与MySQL数据库进行交互和操作。大部分情况我们都是通过语言连接MySQL&#xff0c;建立与MySQL数据库的连接&#xff0c…

【SassVue】仿网易云播放器动画

简介 仿网易云播放动画 效果图&#xff08;效果图&#xff09; 最终成品效果 动画组件 src/components/musicPlay.vue <template><div class"music-play"><div></div><div></div><div></div></div> </te…

INFINI Gateway 如何防止大跨度查询

背景 业务每天生成一个日期后缀的索引&#xff0c;写入当日数据。 业务查询有时会查询好多天的数据&#xff0c;导致负载告警。 现在想对查询进行限制–只允许查询一天的数据&#xff08;不限定是哪天&#xff09;&#xff0c;如果想查询多天的数据就走申请。 技术分析 在每…

CogAgent:带 Agent 能力的视觉模型来了

之前我们分享过智谱AI新一代多模态大模型 CogVLM&#xff0c;该模型在不牺牲任何 NLP 任务性能的情况下&#xff0c;实现视觉语言特征的深度融合&#xff0c;其中 CogVLM-17B 在 14 个多模态数据集上取得最好或者第二名的成绩。 12月15日&#xff0c;基于 CogVLM&#xff0c;提…

AI 绘画StableDiffusionWebui图生图

介绍 stable-diffusion-webui AI绘画工具&#xff0c;本文介绍图生图&#xff0c;以一张图片做底图优化生成。 例如&#xff1a;上传一张真人照片&#xff0c;让AI把他改绘成动漫人物&#xff1b;上传画作线稿&#xff0c;让AI自动上色&#xff1b;上传一张黑白照&#xff0c…

并发踩坑:list共享变量的addAll

背景&#xff1a; 某业务报错了&#xff0c;提示&#xff1a;Caused by: org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.util.ConcurrentModificationException 分析&#xff1a; 这是执行查询时报的 并发修改异常。大概逻辑…

BigQuery Clustered Table 简介 - 聚簇表

Clustered Table的定义 聚簇可以提高某些类型的查询&#xff08;例如&#xff0c;使用过滤条件子句的查询和聚合数据的查询&#xff09;的性能。当通过查询作业或加载作业将数据写入聚簇表时&#xff0c;BigQuery 会使用聚簇列中的值对这些数据进行排序。这些值用于将数据整理…

web3风险投资公司之Electric Capital

文章目录 什么是 Electric CapitalElectric团队 Electric Capital 开发者报告参考 什么是 Electric Capital 官网&#xff1a;https://www.electriccapital.com/ 官方github&#xff1a;https://github.com/electric-capital Electric Capital 是一家投资于加密货币、区块链企…

【VB测绘程序设计】案例11—坐标正算的计算案例(附源码)

【VB测绘程序设计】案例11—坐标正算的计算案例(附源码) 文章目录 前言一、界面预览二、程序介绍三、程序源代码总结前言 ` VB程序在测绘领域应用广泛,能够解决一些常见的简单的计算问题,提高工作效率,本专栏持续更新常用的测绘计算,感谢关注。 坐标正算是已知边长和方位…