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

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=2159

    思路: dp[j][k] 代表消耗耐久度j,干掉k个敌人获得的经验值。

    状态转移方程为: dp[j][k] = max(dp[j][k],dp[j-b[i]][k-1]+a[i]);

    保存下当获得经验值可以升级时,维护下最小的耐久消耗

    实现代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int inf = 0x3f3f3f3f;
    int dp[110][110],a[110],b[110];
    
    int main()
    {
        int n,m,h,s;
        while(cin>>n>>m>>h>>s){
            for(int i = 1;i <= h;i ++){
                cin>>a[i]>>b[i];
            }
            memset(dp,0,sizeof(dp));
            int ans = inf;
            for(int i = 1;i <= h;i ++){
                for(int j = b[i];j <= m;j ++){
                    for(int k = 1;k <= s;k ++){
                        dp[j][k] = max(dp[j][k],dp[j-b[i]][k-1]+a[i]);
                        if(dp[j][k] >= n) ans = min(ans,j);
                    }
                }
            }
            if(ans == inf) cout<<"-1"<<endl;
            else cout<<m-ans<<endl;
        }
    }

        

  • 相关阅读:
    StateListDrawable状态选择器
    Shape
    每周随笔
    每周随笔
    每周随笔
    每周随笔
    每周随笔
    每周随笔
    每周随笔

  • 原文地址:https://www.cnblogs.com/kls123/p/10683779.html
Copyright © 2011-2022 走看看