zoukankan      html  css  js  c++  java
  • Do Palapala (this)

    Description

    伟大的中国人民有宝箱容量为S(0<=S<=20000),有m个物品(0<m<=30,每个物品有一个体积(正整数)。任取若干个装入箱内,使箱子的剩余空间为最小。

    Input

    (this.in)

    一个整数,表示箱子容量
    一个整数,表示有m个物品
    接下来m行,分别表示这m个物品的各自体积

    Output

    (this.out)

    一个整数表示箱子剩余空间。

    SampleInput&Output

    #1

    24

    6

    8

    3

    12

    7

    9

    7

    #1

    0

    =-=

     

     

    首先,读题,就知道这是一道很渣逼的水题。最基础的动归背包问题。学长改的题目就是一个暗示(DP(动态归划))(教练安排学长出题,学长就改noip题发给我们@-@。。。。)。。。。。

    好了,分析题目,题目的意思大致可以转化为:有一个大小为S的背包,有m个物品,每个物品都有各自的大小,求背包内能装下最多的物品体积(不过最后输出背包的剩余空间)。

    读懂了题就很简单了————————

     

    通过动归一遍过。(学长给的题本来以为很水直接暴,结果只过了两个点。。。。。。。。。 受教训了。。。再也不上来随便暴了。。。。)

     

     

    代码如下:

     

     1 #include<iostream> 
     2 #include<cstdio>
     3 using namespace std;
     4 const int maxxiangzi=20000;
     5 const int maxwupin=30;
     6 int m,n,dangqian=0;
     7 int f[maxxiangzi]={0};
     8 int a[maxwupin]={0},c[maxwupin]={0};
     9 int main()
    10 {
    11     freopen("this.in","r",stdin);
    12     freopen("this.out","w",stdout);
    13     cin>>m>>n;
    14     for(int i=1;i<=n;i++)
    15     {
    16         cin>>a[i];
    17         c[i]=a[i];
    18     }
    19     for(int i=1;i<=n;i++)
    20         for(int v=m;v>=a[i];v--)
    21             if(f[v-a[i]]+c[i]>f[v])
    22                 f[v]=f[v-a[i]]+c[i];
    23     cout<<m-f[m];    
    24 }

     

  • 相关阅读:
    kindeditor 创建多个 取值方式
    新浪微博分享平台地址
    thinkphp 直接写SQL
    nginx下禁止目录运行php
    phpcms_v9 同步登陆的BUG
    yii framework 创建项目
    phpcms_v9 关闭debug
    ucenter忘记创始人密码简单解决方法
    XSS 常见手段
    如何在 C 中使用 64 位整数?
  • 原文地址:https://www.cnblogs.com/zhangone/p/5001757.html
Copyright © 2011-2022 走看看