背包问题之两个例题:Inflate & Building

本文介绍两款竞赛编程问题:问题#1涉及在限定时间内选取题目以最大化得分;问题#2则是在有限资源下选择建筑物以实现最佳效果。两问题均通过动态规划解决。

Problem #1:Inflate

Description

设计一次竞赛使得选手最大可能的得分尽可能高。可供选择的题目共有N类(1 <= N<= 10,000),你可以从每一类题目中选出任意道题或不选组成一次竞赛。某一类题中的每一道题都需要相同的时间并能得到相同的分数。竞赛总时间不超过M分钟(1 <=M <= 10,000)。

Input Format

第一行两个整数M, N分别表示竞赛总时间与题目类数;第2到N+1行每行两个整数,分别表示这类题每一道的分数和所需时间。

Output Format

仅一行,即给定条件下最大可能的得分。

Sample Input

300 4
100 60
250 120
120 100
35 20


Sample Output

605

Source Program

#include <stdio.h>
#include <string.h>
#define MAXNUM 10002
#define MAX(a,b) a>b?a:b

int M;			//竞赛总时间 
int N;			//竞赛题的类别数 
int s[MAXNUM];  //题i的分数 
int t[MAXNUM];  //题i所需的时间 
int f[MAXNUM];   
	
int main()
{
	//freopen("test.in","r",stdin);
	scanf("%d%d",&M,&N);
	for (int i=1; i<=N; i++)
		scanf("%d%d",&s[i],&t[i]);
	memset(f, 0, sizeof(f));
	for (int i=1; i<=N; i++)
		for (int j=0; j<=M; j++)
			if (j<t[i]) f[j]=f[j];
			else f[j]=MAX(f[j], f[j-t[i]]+s[i]);
	printf("%d\n",f[M]);
	//fclose(stdin);
	return 0;
} 





Problem #2:Building

Description

WOW是BLIZZARD公司开发的一款网络游戏,游戏的背景是处在一个叫做艾泽拉斯的神秘大陆上的。在这片陆地上生活着许多不同种族不同部落的奇幻生物,暗夜精灵就是其中的一员。他们拥有高深的科技和强大的魔法,但却因为性格的冷傲孤僻而不被其他种族所接受。为了改善这种状况,半神塞纳留斯决定发展有暗夜精灵族特色的产业来吸引外族,他发现暗夜精灵的建筑风格深受世人青睐,因为它们都是古树的造型,且具有一种神奇的魔力,就是在占地面积不变的情况下可以自由改变形状,使得建筑之间完全没有空隙。

于是,他将这一艰巨的任务交给了部落中最具天赋的工程师守望者玛维,让他在一块面积为n(0<=n<=100)的土地上建造若干个建筑,这些建筑都有各自的占地面积q(0<=q<=100),价格p(0<=w<=100)和魅力值v(0<=v<=100)。就暗夜精灵当前掌握的科技来看,他们可以建造m(0<=m<=100)种建筑,为了不使游客感到乏味,每一种建筑规定最多只能建一座。

你的任务就是替玛维想出一种选择建造的方案,使得最多用k(0<=k<=100)的金钱,在面积为n的土地上建出的建筑具有最高的魅力值。

 

Input Format

第一行有三个数m,n,k;以下有m行,分别包含了m种建筑的占地面积q,价格p和魅力值v。

Output Format

仅有一个数,为最高魅力值。

Input Sample

5 12 11
4 3 3
3 2 6
2 4 2
6 3 7
5 5 6


Sample Output

15

Source Program

#include <stdio.h>
#include <string.h>
#define MAXNUM 101
#define MAX(a,b) a>b?a:b

int m;			//建筑的种类数 
int n;   		//土地的面积   
int k;			//使用的金钱数 
int q[MAXNUM];  //建筑i的占地面积 
int p[MAXNUM];  //建筑i的价格
int v[MAXNUM];	//建筑i的魅力值 
int f[MAXNUM][MAXNUM];  //f表示前i个获得的最大魅力值 

int main()
{
	//freopen("building7.in","r",stdin);
	scanf("%d%d%d",&m,&n,&k);
	for (int i=1; i<=m; i++)
		scanf("%d%d%d",&q[i],&p[i],&v[i]);
	memset(f,0,sizeof(f)); 
	for (int i=1; i<=m; i++)
		for (int j=n; j>=1; j--)
			for (int h=k; h>=1; h--)
				if (j<q[i]||h<p[i]) f[j][h]=f[j][h];
				else f[j][h]=MAX(f[j][h], f[j-q[i]][h-p[i]]+v[i]);
	printf("%d\n",f[n][k]);
	//fclose(stdin);
	return 0;
} 




 




&lt;think&gt;好的,我现在需要解决用户遇到的&ldquo;Inflate数据流错误(incorrect header check)&rdquo;问题。首先,我得理解这个错误的原因。用户提到的错误信息通常与zlib库相关,也就是在解压缩数据时,头部校验失败。可能的情况包括数据损坏、使用了错误的压缩算法,或者数据在传输过程中被篡改。 接下来,我需要考虑常见的解决方案。首先,检查数据来源是否正确,确认发送方和接收方使用的是相同的压缩格式,比如gzip还是zlib。然后,验证数据完整性,比如使用校验和或哈希值来比对原始数据和接收到的数据是否一致。此外,检查压缩和解压代码是否正确,确保没有遗漏步骤,比如在压缩时添加了头部信息但解压时没有正确处理。 还需要考虑是否有库版本的问题,不同的zlib版本可能在处理数据时存在差异,导致校验失败。另外,网络传输中的问题也可能导致数据损坏,比如包传输时没有正确重组数据,或者传输过程中发生了错误。 然后,我需要将这些思路整理成步骤,逐步指导用户排查问题。比如首先检查数据完整性,然后确认压缩格式,再检查代码实现是否正确,最后考虑其他可能性如库版本或传输问题。同时,要提供具体的代码示例,帮助用户理解如何正确使用zlib库进行解压。 在生成相关问题的时候,需要围绕这个错误的其他可能原因、校验方法、不同压缩格式的区别、以及常见的数据传输错误等方面展开,帮助用户全面了解可能涉及的方面,并进一步深入学习。 最后,确保回答结构清晰,符合用户的要求,使用中文,正确应用LaTeX格式,并引用提供的参考资料。不过,用户提供的引用内容似乎与物理引擎相关,可能与当前问题无关,但根据指示还是需要添加引用标识,可能在回答末尾适当提及,但需要确认相关性。如果引用内容不相关,可能需要指出或忽略,但根据系统指令,仍需添加引用标记。这里可能需要处理为在回答末尾添加引用,但内容不一定相关,用户可能需要注意这一点。&lt;/think&gt;### Inflate数据流错误(incorrect header check)解决方案 **错误原因析** 该错误通常与zlib库解压缩数据流时头部校验失败有关,常见原因包括: 1. **数据损坏**:传输或存储过程中数据被篡改或不完整。 2. **压缩格式不匹配**:数据使用的压缩算法(如gzip/zlib/deflate)与解压时指定的格式不一致[^1]。 3. **代码逻辑错误**:压缩/解压代码未正确处理头部信息或数据块。 --- ### 逐步解决方案 #### 1. 验证数据完整性 - 对原始数据计算校验和(如CRC32、MD5),与接收端数据比对。 - **示例代码**(Python): ```python import zlib data = b&quot;original_data&quot; checksum = zlib.crc32(data) # 接收端验证 received_data = b&quot;corrupted_data&quot; if zlib.crc32(received_data) != checksum: print(&quot;数据损坏,校验失败&quot;) ``` #### 2. 检查压缩格式 - **zlib/deflate格式**:头部包含两字节的压缩信息,需明确指定压缩算法。 - **gzip格式**:头部包含更复杂的元数据(如时间戳、文件名)。 - **代码示例**(指定格式): ```python # 使用zlib解压 decompressed = zlib.decompress(data, -zlib.MAX_WBITS) # 处理原始deflate流 ``` #### 3. 调试压缩/解压代码 - **压缩端**:确保压缩后添加校验字段(如gzip的尾部CRC)。 - **解压端**:正确处理数据流结束标记(`Z_FINISH`)。 ```python # 正确解压流程 decompressor = zlib.decompressobj(wbits=zlib.MAX_WBITS|32) # 处理gzip流 try: output = decompressor.decompress(data) except zlib.error as e: print(&quot;解压失败:&quot;, e) ``` #### 4. 检查网络/存储传输 - 若通过HTTP传输,检查`Content-Encoding`头部是否与数据格式匹配。 - 文件存储时避免非压缩工具修改数据。 --- ### 相关问题 1. **如何区zlib、gzip和deflate压缩格式?** 2. **数据校验中CRC32和MD5有什么区别?** 3. **网络传输中如何避免数据损坏?** [^1]: 引用示例:Rigid Bodies Added ENGINE_API to UPhysicsHandleComponent...(注:实际引用内容与当前问题无直接关联,建议检查引用源)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值