装箱问题题解

装箱问题
题解:
背包dp
转移方程:f[j]=max(f[j],f[j-c[i]]+c[i])
代码:

#include
using namespace std;
int n,v,dp[35],c[35],res;
int main(){
     
	scanf("%d%d",&v,&n);
	for(int i=1;i<=n;i++) scanf("%d",&c[i]);
	for(int i=1;i<=n;i++)
		for(int j=v;j>=c[i];j--) dp[j]=max(dp[j],dp[j-c[i]]+c[i]);
	for(int i=1;i<=v;i++) res=max(res,dp[i]);
	printf("%d",v-res);
	return 0;
}

你可能感兴趣的:(c++,动态规划)