• 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;    
    }
  • 相关阅读:
    Clustering by fast search and find of density peaks
    《第一行代码》(二)
    TF-IDF
    《第一行代码》(一)
    《OpenCV入门》(三)
    OpenCV入门(二)
    协方差矩阵特征向量的意义
    ICA
    整数划分
    1144. The Missing Number (20)
  • 原文地址:https://www.cnblogs.com/lighter-blog/p/7251441.html
Copyright © 2020-2023  润新知