zoukankan      html  css  js  c++  java
  • HDU2159 研发费用背包

    主题链接:FATE

    状态转移方程:

    dp[ren][num] =max(dp[ren-耐久值][num-1]+ 经验值,dp[ren][num])

    dp表示:当前忍耐度ren下杀敌数为num的经验值


    枚举分别枚举 全部怪物种类、耐久度、杀怪数

    最后在从小到达枚举消耗的耐久度就可以

    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    const int INF = 1e7;
    using namespace std;
    int dp[105][105],cost[600][2];
    int max(int x,int y)
    {
        if(x > y)
            return x;
            else
        return y;
    }
    int min(int x,int y)
    {
        if(x > y)
            return y;
            else
        return x;
    }
    int main()
    {
        int n,m,k,s;
        while(~scanf("%d%d%d%d",&n,&m,&k,&s))
        {
            for(int i = 1;i<=k;i++)
                { scanf("%d%d",&cost[i][0],&cost[i][1]); }
    
                memset(dp,0,sizeof(dp));
                int i,ren,num,ans = -1;
            for( i = 1;i<=k;i++)
            {
                for( ren = cost[i][1];ren<=m;ren++)
                {
                    for( num = 1;num<=s;num++)
                    {
                        if(dp[ren][num] < dp[ren-cost[i][1]][num-1]+ cost[i][0])
                            dp[ren][num] = dp[ren-cost[i][1]][num-1] + cost[i][0];
                    }
                }
            }
            for(int i = 1;i<=m;i++)
            {
                if(dp[i][s] >=n)
                {
                    ans = m - i;
                    printf("%d
    ",ans);
                    break;
                }
            }
            if(ans ==-1)
                printf("%d
    ",ans);
        }
        return 0;
    }


    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    Hia~hia~
    细节与销售
    敛财术
    酒井法子
    买了新手机NOKIA E71
    观《拉贝日记》
    居然不配套
    2009上海最新“四金”及个人所得税计算(器)
    有好听点的新歌么?
    我家乌龟终于下蛋了!
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4910195.html
Copyright © 2011-2022 走看看