sicily 1146 采药

本文深入解析动态规划的基本概念,并以01背包问题为例,详细讲解如何运用动态规划解决实际问题。通过逐步分析和代码实现,读者将掌握动态规划的核心思想及其在解决特定类型问题时的应用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对动态规划不懂,借此记住

01背包问题

虽然是入门级,但是也做了好久~

#include <iostream>
using namespace std;
int drug[ 102 ][ 1002 ];
int main()
{
	int time, size, i;
	int t[ 101 ], v[ 101 ];
	cin >> time >> size;
	for( i = 0; i < size; i++ )
		cin >> t[ i ] >> v[ i ];

	for( i = 0; i <= time; i++ )      // 点之后的都为0
		drug[ size ][ i ] = 0;
	int j;
	for( i = size - 1; i >= 0; i-- )  // 遍历所有点
	{
		for( j = 0; j <= time; j++ )  // 遍历所有可能剩余空间
		{
			if( j < t[ i ] )          // 当剩余空间不支持添加当前点
				drug[ i ][ j ] = drug[ i + 1 ][ j ];
			else                      // 当剩余空间足够大可以支持当前点
			{                        
				if( drug[ i + 1 ][ j ] < drug[ i + 1 ][ j - t[ i ] ] + v[ i ] )  // 如果加上该点后能比原来的大
					drug[ i ][ j ] = drug[ i + 1 ][ j - t[ i ] ] + v[ i ];
				else
					drug[ i ][ j ] = drug[ i + 1 ][ j ];
			}
		}
	}
	int max;
	max = 0;
	for( i = 0; i <= time; i++ )
		if( drug[ 0 ][ i ] > max )
			max = drug[ 0 ][ i ];
	cout << max << endl;
	return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值