zoukankan      html  css  js  c++  java
  • 4978:宠物小精灵之收服

    普通01背包再加一维

    状态:d[i][j]代表:有i个球,j体力,最多能捕获多少精灵

    状态转移:d[i][j]=max(d[i][j],d[i-num[k]][j-val[k]]+1);

    k为精灵的编号,第k个精灵。

    边界情况d[i][0]=d[0][j]=0,都初始化为0也行。

    最后找到所剩的体力最大值判断d[N][i]==d[N][M],i是最少消耗的体力值

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    const int maxN=1000+5;
    const int maxM=500+5;
    int num[105],val[105];
    int d[maxN][maxM];
    
    int main()
    {
        //freopen("in.txt","r",stdin);
        int N,M,K;
        while(cin>>N>>M>>K)
        {
            for(int i=0; i<K; i++)
                scanf("%d%d",&num[i],&val[i]);
            memset(d,0,sizeof(d));
            for(int k=0; k<K; k++)
            {
                for(int i=N; i>=num[k]; i--)
                {
                    for(int j=M; j>=val[k]; j--)
                    {
                        d[i][j]=max(d[i][j],d[i-num[k]][j-val[k]]+1);
                    }
                }
            }
            int r;
            for(int i=0; i<=M; i++)
            {
                if(d[N][i]==d[N][M])
                {
                    r=i;
                    break;
                }
            }
            printf("%d %d
    ",d[N][M],M-r);
        }
        return 0;
    }
    

      

  • 相关阅读:
    RocketMQ消息模型
    RabbitMQ消息模型
    消息队列选择
    消息队列使用场景
    synchronized底层实现
    Java 内存模型
    MySql中的字符数据类型
    php页面编码与字符操作
    git学习总结
    SESSION机制
  • 原文地址:https://www.cnblogs.com/pach/p/6725034.html
Copyright © 2011-2022 走看看