写在前面
来水一篇博客
$Idea$
就是$DP$
设:$f[i][j]$代表有$i$升氧气和$j$升氮气的气罐的最小重量
状态转移方程:
$f[t_1][t_2]=\min(f[t_1][t_2],f[j][v]+c[i])$
代码里有注释
$Code$
int a[1001],b[1001],c[1001],f[1001][1001];
//a代表氧气含量,b代表氮气含量,c代表气罐重量,f[i][j]代表有i升氧气和j升氮气的气罐的最小重量
signed main(){
int m,n,k;
cin>>m>>n>>k;//输入所需氧气氮气含量
for(int i=1;i<=k;i++)
cin>>a[i]>>b[i]>>c[i];//输入各个罐子氧气氮气含量
memset(f,1,sizeof(f));
f[0][0]=0;
for(int i=1;i<=k;i++)//遍历每个罐子
for(int j=m;j>=0;j--)
for(int v=n;v>=0;v--){
int t1,t2;//t1表示总氧气,t2表示总氮气
t1=j+a[i];//加上本次遍历的罐子中的氧气
t2=v+b[i];//加上本次遍历的罐子中的氮气
if(t1>m) t1=m;
if(t2>n) t2=n;//由于我们只需要求得完成所需氧气和氮气的重量最小值,因此若含量大于只需记为等于
//if(f[t1][t2]>f[j][v]+c[i])//取最小值
f[t1][t2]=min(f[t1][t2],f[j][v]+c[i]);
}
cout<<f[m][n];
return 0;
}
$$ The \quad End $$
$$ \text{我和我的祖国,一刻也不能分割;无论我走到哪里,都留下一首赞歌。-《我和我的祖国》} $$
不错。受你启示,我也简化了我的代码。
对您有帮助就说明我写的题解还有用
最近被我和我的祖国所萦绕,我和acwing,一刻也不能分割,无论我走到哪里,都留下一篇题解。《我和acwing》