zoukankan      html  css  js  c++  java
  • hdu 1712 ACboy needs your help 分组背包

    m 的时间,一共 n 门课程,每门课程花不同时间得到的值不同,求能获得的最大值。

    用分组背包,n 门课看成 n 组物品,每个物品所花费的时间为背包容量。

    分组背包:

    for(int i=1; i<=n; i++)  // i 组物品

      for(int j=V; j>=0; j--)  // 容量为 j 时

        for(int k=1; k<=c[i]; k++)  // 第 i 组物品中放哪个(或者不放)

          dp[j] = max(dp[j], dp[j-w[k]] + v[k]); 

    代码:

    #include <iostream>
    #include <cstring>
    using namespace std;
    
    const int MAX = 105;
    
    int dp[MAX];
    int v[MAX][MAX];    //第 i 组物品,重量为 j 时的价值 
    int n, m;
    
    int main(){
        //freopen("input.txt", "r", stdin);
        
        while(cin >> n >> m && n + m != 0){
            for(int i=1; i<=n; i++){
                for(int j=1; j<=m; j++){
                    cin >> v[i][j];
                }
            }
            
            //分组背包
            memset(dp, 0, sizeof(dp));
            for(int i=1; i<=n; i++){
                for(int j=m; j>=0; j--){
                    for(int k=1; k<=m; k++){
                        if(j >= k)
                            dp[j] = max(dp[j], dp[j-k] + v[i][k]);
                    }
                }
            } 
            
            cout << dp[m] << endl;
        }
        
        return 0;    
    }
  • 相关阅读:
    numpy基础篇-简单入门教程4
    杭电oj 多项式求和
    杭电oj 素数判定
    杭电oj 水仙花数
    杭电oj 求数列的和
    杭电oj 数值统计
    杭电oj 平方和与立方和
    杭电oj 求奇数的乘积
    杭电 oj 第几天?
    杭电 oj 成绩转换
  • 原文地址:https://www.cnblogs.com/lighter-blog/p/7251441.html
Copyright © 2011-2022 走看看