王梓涵
( 梦幻の幸运使者 qwq)
1
#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 个赞
提供核心代码
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 个赞