NOI导刊2010提高装备运输

www.luogu.org/problem/show?pid=1794
挺裸的一题背包,算很基础。
可以运用的技巧是三维->二维(节省空间还能少敲一点代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
inline void in(int &p,char c=getchar())//非负整数读入优化
{
	while(c<'0' or c>'9')
		c=getchar();
	p=0;
	while(c>='0' and c<='9')
		p=p*10+c-'0',c=getchar();
}
int f[501][501],costv[501],costh[501],value[501],V,G,n;//f[ ]为求解的答案。costh[ ]为物品的重量。costv[ ]为物品的体积。value[ ]为物品的价值(火力值)。V G n同题面
int main()
{
	in(V);in(G);in(n);
	for(int i=0;i<n;i++)
	{
		in(value[i]);
		in(costv[i]);
		in(costh[i]);
	}
	for(int i=0;i<n;i++)
		for(int j=V;j>=costv[i];j--)
			for(int k=G;k>=costh[i];k--)
				f[j][k]=max(f[j][k],f[j-costv[i]][k-costh[i]]+value[i]);//考虑是否放这个物品。放的话就从(更少的体积)(更少的载重)中增加价值。
	cout<<f[V][G];
	return 0;
}

原文地址:https://www.cnblogs.com/syhien/p/7712357.html