zoukankan      html  css  js  c++  java
  • 二维背包——HDU-2159

    题目含义

     嗯。。。每种怪都有一个对应的经验值和忍耐度

    问你能不能在有限的忍耐度和杀怪数之内得到升级所需的经验

    如果能,输入升完级能保留的最大忍耐度

    题目分析

    如果没有杀怪数限制,就是一个将忍耐度看做背包容量,寻找忍耐度m能得到的最大经验值的完全背包

    如果是给每个怪物限制一个杀怪数,那就是一个多重背包

    但最后这道题两者都不是,而是一个记录杀怪数的二维背包

    题目代码

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    typedef long long LL;
    const int maxn=107;
    int n,m,k,s;
    struct node{
        int val;
        int cost;
    }mon[507];
    int dp[maxn][maxn];
    int main(){
        while(~scanf("%d%d%d%d",&n,&m,&k,&s)){
            for(int i=1;i<=k;i++)
                scanf("%d%d",&mon[i].val,&mon[i].cost);
            memset(dp,0,sizeof(dp));
            for(int i=1;i<=k;i++)
            for(int j=mon[i].cost;j<=m;j++)
            for(int t=1;t<=s;t++){
                dp[j][t]=max(dp[j][t],dp[j-mon[i].cost][t-1]+mon[i].val);
            }
            if(dp[m][s]<n)printf("-1
    ");
            else{
                int mx;
                for(mx=0;mx<=m;mx++)
                    if(dp[mx][s]>=n)break;
                printf("%d
    ",m-mx);
            }
        }
        return 0;
    }
  • 相关阅读:
    centos 卸载自带的apache
    静态方法绑定
    安装apc
    避免SSH连接因超时闲置断开
    svn使用安全问题
    接口类,和抽象类。
    function (规定参数必须为某个对象的实例)
    jquery 获取DIV边框的宽
    正则表达式(非捕获)
    Linux ftp服务器Proftp配置
  • 原文地址:https://www.cnblogs.com/helman/p/11232237.html
Copyright © 2011-2022 走看看