zoukankan      html  css  js  c++  java
  • hdu(2159)(二维背包)

    该题为二维背包
    即比一维多加了一个限制条件,同理可以推至多维即是有多个限制条件
    #include <stdio.h>
    #include <string.h>
    struct node
    {
        int r,e;
    }s[150];
    int max(int a,int b)
    {
        if (a>b)
        return a;
        else
        return b;
    }
    int main()
    {
        int n,m,k,a,i,l,j,f[100][100];
        while(scanf("%d%d%d%d",&n,&m,&k,&a)!=EOF)
        {
            for (i=1;i<=k;++i)
            {
                scanf("%d%d",&s[i].e,&s[i].r);
            }
            memset(f,0,sizeof(f));
            for (i=1;i<=k;++i)
            for (l=s[i].r;l<=m;++l)//该循环与下一个循环可以交换
            for (j=1;j<=a;++j)
            {
                f[l][j]=max(f[l-s[i].r][j-1]+s[i].e,f[l][j]);
                //f[l][j]表示消耗l忍耐度杀死j只时所获得的价值
                //由动态规划可知其等于max(该只未杀时所消耗的忍耐度+杀死该只得到的价值,当前状态)
                //可能会觉得用一定的忍耐度不一定能杀死那么多的怪兽,但是在该种情况下,对应的f为0,不会有影响
            }
            if (f[m][a]<n)
            printf ("-1\n");
            else
            {
                for (i=0;i<=m;++i)
                if (f[i][a]>=n)
                {
                    printf ("%d\n",m-i);
                    break;
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    指针
    显示和隐式转换
    C++虚函数
    字符串输出
    BP神经网络
    超像素分割
    函数putText()在图片上写文字
    compare
    十五、cookies和session的使用
    爬取腾讯社招职位信息
  • 原文地址:https://www.cnblogs.com/1994two/p/3063371.html
Copyright © 2011-2022 走看看