当前位置: 首页 > article >正文

C++ 解决背包问题(动态规划)

问题描述
  有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数)。
  要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。

输入格式

  第一行为一个整数,表示箱子容量;
  第二行为一个整数,表示有n个物品;
  接下来n行,每行一个整数表示这n个物品的各自体积。

输出格式

  一个整数,表示箱子剩余空间。
  样例输入
  24
  6
  8
  3
  12
  7
  9
  7

样例输出

0

#include "iostream"
#include "vector"
using namespace std;
bool findinv(int *a,int i,int n)
{
    for (int j = 0; j <n ; ++j) {
        if(i==a[j])
        {
            return true;
        }
    }
    return false;
}
int main()
{
//    输入处理
    int v;
    cin>>v;
    int n;
    cin>>n;
    int a[n];
    for (int i = 0; i < n; ++i) {
        cin>>a[n];
    }

//    分别求出每一个容量的最优解
    vector<int> vi;
//    容量为0的默认最优解为0
    vi.push_back(0);
//    分别从1开始到v大小的容量
    for (int i = 1; i <= v; ++i) {
        if(findinv(a,i,n))
        {
//            如果有这个物品,就直接存放0
            vi.push_back(0);
        }
        else
        {
            vi.push_back(i);
//            进行计算i容量大小的最优解
            for (int l = 0,n=vi.size()-2; l <= n; ++l,n--) {
                if(vi[l]+vi[n]<vi[i])
                {
                    vi[i]=vi[l]+vi[n];
                }
            }
        }
    }
    cout<<vi[vi.size()-1]<<endl;
    return 0;
}


http://www.kler.cn/a/4917.html

相关文章:

  • 【Selenium】模拟按键输入的Keys类属性列表
  • 初识Python
  • python面向对象编程解释
  • 华为正式官宣进军 ERP 市场 ,什么是ERP,如何从商业角度解读此举?
  • C++ Primer第五版_第六章习题答案(21~30)
  • ZooKeeper集群安装
  • 手把手教你在Windows 10,MacOS和Linux中安装TensorFlow 2-GPU版本,亲测有效(附相关安装下载资源)
  • DINO-DETR在CADC数据集进行实验与分析
  • 12.Java之接口
  • 1.3 从0开始学Unity游戏开发--引擎和编辑器
  • 如何利用开源思想开发一个SEO友好型网站
  • 进入软件测试行业需要学习多久
  • 【新2023Q2模拟题JAVA】华为OD机试 - 绘图机器
  • 基于全志F133-A使用adb调试
  • Heic是什么格式?如何在电脑里打开?
  • Linux——基本指令
  • leetcode 括号(面试题)
  • Prometheus监控实战系列九:主机监控
  • 【组织架构】中国铁路上海局集团有限公司
  • 光耦合器的工作,类型和应用