【acwing】1020. 潜水员*(二维价值的01背包)

穿越隧道

#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
const int N = 1e3 + 10;
int n,m,kk;
int f[N][N];
int g[N];
int w1[N],w2[N],v[N];
int main(){
	scanf("%d%d",&n,&m);
	scanf("%d",&kk);
	for(int i = 1; i <= kk; i++){
		cin >> w1[i] >> w2[i] >> v[i];
	}
	memset(f,0x3f,sizeof(f));
	f[0][0] = 0;
	int oq = 0, dq = 0;
	for(int i = 1; i <= kk; i++){
		for(int j = n; j >= 0; j--){
			for(int k = m; k >= 0; k--){
				//if(f[j - w1[i]][k - w2[i]] + v[i] < f[j][k]){
//					oq += w1[i];
//					dq += w2[i];
//				}
				f[j][k] = min(f[j][k], f[max(0,j - w1[i])][max(0,k - w2[i])] + v[i]);
			}
		}
	}
	
	cout << f[n][m] << endl;
	return 0;
}

背包求法:
体积至少是j。(赋值为无穷,第一个0值为0.
体积最多是j。(常用,全局变量赋值为0)
体积恰好是j。(赋值为负无穷,初始化为0)
大佬的总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值