WA20fen(分)

#include<bits/stdc++.h>
using namespace std;
int v1,v2,n;
int w[10001],c[10001],z[10001],dp[1000001];
int main(){
	cin>>v1>>v2;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>w[i]>>c[i]>>z[i];
	}
	fill(dp+1,dp+10001,100000001);
	for(int i=1;i<=n;i++){
		for(int j=w[i];j<=v1;j++){
			dp[j]=min(dp[j],dp[j-w[i]]+z[i]);
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=c[i];j<=v2;j++){
			dp[j]=min(dp[j],dp[j-c[i]]+z[i]);
		}
	}
	cout<<dp[n];
	return 0;
} 
现有一些带两种气体(氧气和氮气)的气缸,潜水员为了完成工作需要特定数量的氧和氮,每个气缸都有自身的重量和两种气体的含量。请问潜水员所需携带气缸的最小总重量是多少?

例如:有5个气缸。每行三个数字为:氧,氮的含量和气缸的重量:

3 36 120

10 25 129

5 50 250

1 45 130

4 20 119

如果潜水员需要5升的氧和60升的氮,则总重最小为249(携带1,2或者携带4,5号气缸)。

输入格式:
第一行有2整数m,n(1≤m≤21,1≤n≤79)。它们表示氧,氮各自需要的量。

第二行为整数k(1≤k≤1000)表示气缸的个数。

此后的k行,每行包括ai,bi,ci(1≤ai≤21,1≤bi≤79,1≤ci≤800)3个整数。这些各自是:第i个气缸里的氧和氮的容量及汽缸重量。

输出格式:
仅一行包含一个整数,为潜水员完成工作所需的气缸的重量总和的最低值。

样例输入:
5 60
5
3 36 120
10 25 129
5 50 250
1 45 130
4 20 119
样例输出:
249
1 个赞

二维费用背包是这样的?

2 个赞

不知道用啥做

2 个赞

你都不用二维数组?

2 个赞

对啊

2 个赞

背包优化啊

2 个赞

提供核心代码

for(i=1;i<=k;++i)
	for(j=m;j>=0;--j)
	for(x=n;x>=0;--x)
	{
		t1=j+a[i];
		t2=x+b[i];
		if(t1>m) t1=m;
		if(t2>n) t2=n;
		f[t1][t2]=min(f[t1][t2],f[j][x]+c[i]); 
	}
3 个赞

你这格式

2 个赞

感觉不太像dp

2 个赞

可这就是dp里的题

1 个赞

这不是背包吗

2 个赞

我们老师就这么教

2 个赞

啊?

1 个赞

这不就是背包板子?

3 个赞

当来不是信友队的老师是学校里的老师

2 个赞

???
水帖?

做水题去了

题目
这道题目我推荐

不多用了10223代码