• 二维背包


      最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务。久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级。现在的问题是,xhd升掉最后一级还需n的经验值,xhd还留有m的忍耐度,每杀一个怪xhd会得到相应的经验,并减掉相应的忍耐度。当忍耐度降到0或者0以下时,xhd就不会玩这游戏。xhd还说了他最多只杀s只怪。请问他能升掉这最后一级吗?

    Input

      输入数据有多组,对于每组数据第一行输入n,m,k,s(0 < n,m,k,s < 100)四个正整数。分别表示还需的经验值,保留的忍耐度,怪的种数和最多的杀怪数。接下来输入k行数据。每行数据输入两个正整数a,b(0 < a,b < 20);分别表示杀掉一只这种怪xhd会得到的经验值和会减掉的忍耐度。(每种怪都有无数个)

    Output

      输出升完这级还能保留的最大忍耐度,如果无法升完这级输出-1。

    Sample Input

    10 10 1 10
    1 1
    10 10 1 9
    1 1
    9 10 2 10
    1 1
    2 2

    Sample Output

    0
    -1
    1

    因为杀一个怪即涨经验又掉忍耐度,就有两个状态伴随,可以设dp[i][j]表示忍耐度为i杀j个怪所获得的最大经验,只要在i在0-m,j在0-s之间有大于n的数字就行了
     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <string.h>
     4 using namespace std;
     5 int dp[110][110];//忍耐度为i杀j个怪得到的最大经验
     6 int main(){
     7     int n,m,k,s,a,b;
     8     while(scanf("%d %d %d %d",&n,&m,&k,&s)!=EOF){
     9         memset(dp,0,sizeof(dp));
    10         for(int l = 0; l < k; l ++){
    11             scanf("%d %d",&a,&b);
    12             for(int i = b; i <= m; i ++){
    13                 for(int j = 1; j <= s; j ++){
    14                     dp[i][j] = max(dp[i][j],dp[i-b][j-1]+a);
    15                 }
    16             }
    17             
    18         }
    19         if(dp[m][s] < n)printf("-1
    ");
    20         else{
    21             int Min = 0;
    22             for(int i = 0; i <= m; i ++){
    23                 for(int j = 0; j <= s; j ++){
    24                     if(dp[i][j] >= n){
    25                         //printf("%d %d   :%d
    ",i,j,dp[i][j])
    26                         Min = i;
    27                         goto tt;
    28                     }
    29                 }
    30             }
    31             tt:printf("%d
    ",m-Min);
    32         }
    33     }
    34     return 0;
    35 }
  • 相关阅读:
    CSS文字的处理
    typeof 检测变量的数据类型
    BZOJ 1257: [CQOI2007]余数之和
    BZOJ 1218: [HNOI2003]激光炸弹
    BZOJ 3251: 树上三角形
    BZOJ 3916: [Baltic2014]friends
    BZOJ 1610: [Usaco2008 Feb]Line连线游戏 暴力
    BZOJ 1593 [Usaco2008 Feb]Hotel 旅馆 双倍经验,线段树
    BZOJ 1096 [ZJOI2007]仓库建设 BZOJ 3437 小P的牧场 BZOJ 3156 防御准备 斜率优化dp
    BZOJ 2582 : Bovine Alliance DFS
  • 原文地址:https://www.cnblogs.com/xingkongyihao/p/7193120.html
Copyright © 2020-2023  润新知