tyvj P1005 采药

本文介绍了一个经典的背包问题——草药采集问题,并详细解释了如何利用动态规划解决此问题,包括关键步骤和实现代码。
-题目来源:

题目描述:

描述

辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。” 如果你是辰辰,你能完成这个任务吗?

输入格式

输入文件medic.in的第一行有两个整数T(1 <= T <= 1000)和M(1 <= M <= 100),用一个空格隔开,T代表总共能够用来采药的时间,M代表山洞里的草药的数目。接下来的M行每行包括两个在1到100之间(包括1和100)的整数,分别表示采摘某株草药的时间和这株草药的价值。

输出格式

输出文件medic.out包括一行,这一行只包含一个整数,表示在规定的时间内,可以采到的草药的最大总价值。

测试样例1

输入

70 3 71 100 69 1 1 2

输出

3

备注

对于30%的数据,M <= 10;对于全部的数据,M <= 100。
-------------------------------------------------------------------------------------------------------------------------------------
思路:这个问题属于背包问题,更进一步讲是0-1问题。
一开始我尝试使用价值/时间最大法,即将所有药材都以 价值/时间 降序排列,从 价值/时间 最大的开始塞进背包直到超出时间。这种方法的确能够通过样例,但是这个样例实在太简单了,没有暴露出其他问题,所以没有AC,于是将原题目百度了一下,发现要使用动态规划的方法。(可见:http://wenku.baidu.com/link?url=SDqMRJ5bPrTPn3P-Nx3dpao2nVqvPiiBghk8qd5CMtDVFp5CWdOSBkrKgpHdStWB7vHPFSU_o3qSBknCh_boul2TXH1vT8ZJhsAy2roEUtq)
关键的动态规划要点我总结如下:
1、把所有的草药从上到下排成1列,从1开始升序编号。
2、采药的终极目标是使到最后的价值最大,那么我们可以求对每一株的最大价值来获得最后的最大价值。
3、两个重要推论:(来自分析和解答)
4、

Y

w

j

>

)

,

1

(

)

,

(

Y

j

A

Y

j

A

=

若wj>Y,则A(j,Y)=A(j-1,Y)。也就是说,如果采这药材的时间超过最长时间,那么到这个药材的最大价值等于前一个药材的最大价值。
5、若wj<Y,则A(j,Y)=max(A(j-1,Y),A(j-1,Y-wj)+pj).这就是说,如果采这个药材的时间没有超过最长时间,那么这株药材的最大价值时间就是前一个药材并且在Y减去该药材所需时间后的局限时间里的最大价值。
6、开二维数组 int Gather[M+1][T+1],Gather[i][j]的值表示总的采药时间不超过j,采药数量不超过i时所采草药的最大价值。
然后以下图的顺序开始遍历
_______________________________________________________________________________________________________________________________________________________
知道思路之后,会遇到一些代码编写上的小问题。(我用的是C)
要注意到Gather二维数组的是以[数量][时间]为坐标的,这和输入数据不同,容易搞混;
其次,Gather二维数组的标度比真正的标度要大1,所以Array数组中会出现i-1的情况。
AC代码如下:
#include <stdio h=""></stdio>
#include <stdio h="">
<pre name="code" class="cpp">#include <stdlib.h>
void Package(int T,int M);
int Max(int A,int B);

int Array[100][2];
int Gather[101][1001];






int main()
{
	int M,T;
	int Time, Result;
	int i;

	scanf("%d%d",&T,&M);

	for(i = 0;i < M;i++)
	{
		scanf("%d%d",&Array[i][0],&Array[i][1]);
	}


	Time=0;
	Result=0;

	Package(T,M);

	

	printf("%d\n",Gather[M][T]);
	//system("pause");
	return 0;

}

void Package(int T,int M)
{
	int i,j;
	int a,b;

	
	for(i=0;i<T+1;i++)
		Gather[0][i]=0;

	for(i=0;i<M+1;i++)
		Gather[i][0]=0;


	for(i = 1;i < T+1;i++)
		for(j = 1;j < M+1;j++)
		{
			if(Array[j-1][0]>i)
				Gather[j][i]=Gather[j-1][i];
			else
			{
				Gather[j][i]=Max(Gather[j-1][i],Gather[j-1][i-Array[j-1][0]]+Array[j-1][1]);
			}

			/*for(a = 0; a < M+1; a++)
			{
				for(b = 0; b <T+1;b++)
					printf("%2d",Gather[a][b]);
				printf("\n");
			}
			printf("__________________________\n");
*/
		}


}

int Max(int A,int B)
{
	return (A>B)?A:B;
}






内容概要:本文为《科技类企业品牌传播白皮书》,系统阐述了新闻媒体发稿、自媒体博主种草与短视频矩阵覆盖三大核心传播策略,并结合“传声港”平台的AI工具与资源整合能力,提出适配科技企业的品牌传播解决方案。文章深入分析科技企业传播的特殊性,包括受众圈层化、技术复杂性与传播通俗性的矛盾、产品生命周期影响及2024-2025年传播新趋势,强调从“技术输出”向“价值引领”的战略升级。针对三种传播方式,分别从适用场景、操作流程、效果评估、成本效益、风险防控等方面提供详尽指南,并通过平台AI能力实现资源智能匹配、内容精准投放与全链路效果追踪,最终构建“信任—种草—曝光”三位一体的传播闭环。; 适合人群:科技类企业品牌与市场负责人、公关传播从业者、数字营销管理者及初创科技公司创始人;具备一定品牌传播基础,关注效果可量化与AI工具赋能的专业人士。; 使用场景及目标:①制定科技产品全生命周期的品牌传播策略;②优化媒体发稿、KOL合作与短视频运营的资源配置与ROI;③借助AI平台实现传播内容的精准触达、效果监测与风险控制;④提升品牌在技术可信度、用户信任与市场影响力方面的综合竞争力。; 阅读建议:建议结合传声港平台的实际工具模块(如AI选媒、达人匹配、数据驾驶舱)进行对照阅读,重点关注各阶段的标准化流程与数据指标基准,将理论策略与平台实操深度融合,推动品牌传播从经验驱动转向数据与工具双驱动。
【3D应力敏感度分析拓扑优化】【基于p-范数全局应力衡量的3D敏感度分析】基于伴随方法的有限元分析和p-范数应力敏感度分析(Matlab代码实现)内容概要:本文档围绕“基于p-范数全局应力衡量的3D应力敏感度分析”展开,介绍了一种结合伴随方法与有限元分析的拓扑优化技术,重点实现了3D结构在应力约束下的敏感度分析。文中详细阐述了p-范数应力聚合方法的理论基础及其在避免局部应力过高的优势,并通过Matlab代码实现完整的数值仿真流程,涵盖有限元建模、灵敏度计算、优化迭代等关键环节,适用于复杂三维结构的轻量化与高强度设计。; 适合人群:具备有限元分析基础、拓扑优化背景及Matlab编程能力的研究生、科研人员或从事结构设计的工程技术人员,尤其适合致力于力学仿真与优化算法开发的专业人士; 使用场景及目标:①应用于航空航天、机械制造、土木工程等领域中对结构强度和重量有高要求的设计优化;②帮助读者深入理解伴随法在应力约束优化中的应用,掌握p-范数法处理全局应力约束的技术细节;③为科研复现、论文写作及工程项目提供可运行的Matlab代码参考与算法验证平台; 阅读建议:建议读者结合文中提到的优化算法原理与Matlab代码同步调试,重点关注敏感度推导与有限元实现的衔接部分,同时推荐使用提供的网盘资源获取完整代码与测试案例,以提升学习效率与实践效果。
源码来自:https://pan.quark.cn/s/e1bc39762118 SmartControlAndroidMQTT 点个Star吧~ 如果不会用下载或是下载慢的,可以在到酷安下载:https://www.coolapk.com/apk/com.zyc.zcontrol 本文档还在编写中!!! 被控设备: 按键伴侣ButtonMate 直接控制墙壁开关,在不修改墙壁开关的前提下实现智能开关的效果 zTC1_a1 斐讯排插TC1重新开发固件,仅支持a1版本. zDC1 斐讯排插DC1重新开发固件. zA1 斐讯空气净化器悟净A1重新开发固件. zM1 斐讯空气检测仪悟空M1重新开发固件. zS7 斐讯体重秤S7重新开发固件.(仅支持体重,不支持体脂) zClock时钟 基于esp8266的数码管时钟 zMOPS插座 基于MOPS插座开发固件 RGBW灯 基于ESP8266的rgbw灯泡 zClock点阵时钟 基于ESP8266的点阵时钟 使用说明 此app于设备通信通过udp广播或mqtt服务器通信.udp广播为在整个局域网(255.255.255.255)的10181和10182端口通信.由于udp广播的特性,udp局域网通信不稳定,建议有条件的还是使用mqtt服务器来通信. app设置 在侧边栏点击设置,进入设置页面.可设置mqtt服务器.(此处总是通过UDP连接选项无效!) 设备控制页面 (每总设备页面不同) 界面下方的服务器已连接、服务器已断开 是指app与mqtt服务器连接状态显示.与设备连接状态无关. 右上角,云图标为与设备同步mqtt服务器配置.由于可以自定义mqtt服务器,所以除了需要将手机连入mqtt服务器外,还需要将被控设备连入...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值