装箱问题

题源

呼~动态规划、递归、记忆化搜索都能解,但是好像又被递归绕进去了
 

题目描述

有一个箱子容量为 V,同时有 n 个物品,每个物品有一个体积。

现在从 n 个物品中,任取若干个装入箱内(也可以不取),使箱子的剩余空间最小。输出这个最小值。

输入格式

第一行共一个整数 V,表示箱子容量。

第二行共一个整数 n,表示物品总数。

接下来 n 行,每行有一个正整数,表示第 i 个物品的体积。

输出格式

  • 共一行一个整数,表示箱子最小剩余空间。

输入输出样例

输入 #1复制

24
6
8
3
12
7
9
7

输出 #1复制

0

说明/提示

对于 100% 数据,满足 0<n≤30,1≤V≤20000。

动态规划,思想简单易懂

#include<bits/stdc++.h>
using namespace std;
int v,n;
int a[100]={0};
int dp[20005][20005]={0};
int main()
{
	
	cin>>v>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=n;i++){
		for(int j=0;j<=v;j++){
			if(j>=a[i]){
				dp[i][j]=max(dp[i-1][j],dp[i-1][j-a[i]]+a[i]);
			}
			else{
				dp[i][j]=dp[i-1][j];
			}
		}
	}
	
	cout<<v-dp[n][v];
	return 0;
}

接下来是递归

#include<bits/stdc++.h>
using namespace std;
int v,n;
int a[100]={0};
int dp[20005][20005]={0};
int sum=0;
int minn=9999999;
void dfs(int x,int v)
{
	minn=min(minn,v);
	if(x==n+1){
		return;
	}
	if(v>=a[x]){//空间有多余时可以得选 
		dfs(x+1,v-a[x]);
	}
	dfs(x+1,v);
	

    return;
}
int main()
{
	
	cin>>v>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
    dfs(1,v);
	
	cout<<minn;
	return 0;
}

然后是记忆化搜索

#include<bits/stdc++.h>
using namespace std;
int v,n;
int a[100]={0};
int dp[20005][20005]={0};
int sum=0;
int minn=9999999;
int dfs(int x,int v)
{
	if(x==0) return dp[x][v] ;
	if(dp[x][v]!=0) return dp[x][v]; 
    if(v>=a[x]) return dp[x][v]=max(dfs(x-1,v),dfs(x-1,v-a[x])+a[x]);
    return dp[x][v]=dfs(x-1,v);
}
int main()
{
	
	cin>>v>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
    cout<<v-dfs(n,v);
	return 0;
}

相关推荐

  1. 装箱问题

    2024-03-31 07:36:06       16 阅读
  2. 7-9 装箱问题

    2024-03-31 07:36:06       36 阅读
  3. 装箱问题(C语言)

    2024-03-31 07:36:06       33 阅读
  4. 装箱和拆箱(js的问题

    2024-03-31 07:36:06       32 阅读
  5. 实验7-1-11 装箱问题(PTA)

    2024-03-31 07:36:06       17 阅读
  6. 信息学奥赛一本通:装箱问题

    2024-03-31 07:36:06       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-31 07:36:06       14 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-31 07:36:06       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-31 07:36:06       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-31 07:36:06       18 阅读

热门阅读

  1. 【R语言从0到精通】-2-数据结构

    2024-03-31 07:36:06       15 阅读
  2. 解释TCP和UDP之间的区别

    2024-03-31 07:36:06       15 阅读
  3. Linux-ntp-ptp-gptp

    2024-03-31 07:36:06       12 阅读
  4. C++入门

    C++入门

    2024-03-31 07:36:06      12 阅读
  5. Go的数据结构与实现【HashMap】

    2024-03-31 07:36:06       19 阅读
  6. go mod命令介绍

    2024-03-31 07:36:06       14 阅读
  7. Let`s move - sui move开发实战-dao(6)反馈

    2024-03-31 07:36:06       18 阅读
  8. math模块篇(七)

    2024-03-31 07:36:06       16 阅读
  9. 代码随想录算法训练营第三十四天|leetcode62、63题

    2024-03-31 07:36:06       14 阅读
  10. 【LeetCode热题100】【链表】LRU缓存

    2024-03-31 07:36:06       17 阅读