zoukankan      html  css  js  c++  java
  • 经典的背包问题

    背包问题I
    难度级别:B; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B
    试题描述

        有一个背包容积为 V 和 n 个物品,并给出每个物品有一个体积。要求从 n 个物品中,任取若干个装入背包内,使背包的剩余空间为最小。

    输入
    第一行两个正整数 V 和 n,分别表示背包的容积和待装物品的个数;第二行包括 n 个正整数,表示 n 个物品的体积,两两之间有一个空格分隔。
    输出
    一个数,表示背包中剩余空间的最小值
    输入示例
    24 6
    8 3 12 7 9 7
    输出示例
    0
    其他说明
    数据范围:0<V≤20000,0<n≤30
     

    真是太简单了,转移方程:dp[j]=max(dp[j],dp[j-a[i]]+a[i]);。

     1 #include<iostream>  
     2 #include<cstring>  
     3 using namespace std;  
     4 int main()  
     5 {  
     6   int v,n;
     7   cin>>v>>n;  
     8   int a[n],dp[v+1];  
     9   memset(dp,0,sizeof(dp));  
    10   for(int i=0;i<n;i++) 
    11   {  
    12     cin>>a[i];
    13     for(int j=v;j>=a[i];j--)  
    14       dp[j]=max(dp[j],dp[j-a[i]]+a[i]);  
    15   }  
    16   cout<<v-dp[v];  
    17 }
    View Code
    你——悟到了么?
  • 相关阅读:
    利用string 字符串拷贝
    新手学vim配置
    进程描述符task_struct
    并查集
    堆Heap
    Bitset位图
    排序
    sql时间查询
    javascript 中的 call
    css 笔记——设置禁用中文输入法
  • 原文地址:https://www.cnblogs.com/wxjor/p/5432704.html
Copyright © 2011-2022 走看看