zoukankan      html  css  js  c++  java
  • 分组背包问题

    分组背包问题

     

     二维:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 const int maxn = 110;
     5 
     6 int dp[maxn][maxn];//dp[i][j]:只从前i组物品中选, 当前体积小于等于j的最大值
     7 int v[maxn][maxn], w[maxn][maxn], s[maxn]; //v为体积, w为价值, s代表第i组物品的个数
     8 int n,m,k;
     9 
    10 int main()
    11 {
    12     scanf("%d%d",&n,&m);
    13     for(int i=1;i<=n;i++){
    14         scanf("%d",&s[i]);
    15         for(int j=0;j<s[i];j++){
    16             scanf("%d%d",&v[i][j], &w[i][j]);
    17         }
    18     }
    19     for(int i=1;i<=n;i++){
    20         for(int j=0;j<=m;j++){
    21             dp[i][j] = dp[i-1][j];//第i组不选
    22             for(int k=0;k<s[i];k++){//第i组选哪个
    23                 if( j>=v[i][k] ){
    24                     dp[i][j] = max(dp[i][j], dp[i-1][j-v[i][k]]+w[i][k]);
    25                 }
    26             }
    27         }
    28     }
    29     printf("%d
    ",dp[n][m]);
    30     return 0;
    31 }

    一维:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 const int maxn = 110;
     5 
     6 int dp[maxn];//仿照01背包滚动数组
     7 int v[maxn][maxn], w[maxn][maxn], s[maxn]; //v为体积, w为价值, s代表第i组物品的个数
     8 int n,m,k;
     9 
    10 int main()
    11 {
    12     scanf("%d%d",&n,&m);
    13     for(int i=1;i<=n;i++){
    14         scanf("%d",&s[i]);
    15         for(int j=0;j<s[i];j++){
    16             scanf("%d%d",&v[i][j], &w[i][j]);
    17         }
    18     }
    19     for(int i=1;i<=n;i++){
    20         for(int j=m;j>=0;j--){
    21             for(int k=0;k<s[i];k++){//第i组选哪个
    22                 if( j>=v[i][k] ){
    23                     dp[j] = max(dp[j], dp[j-v[i][k]]+w[i][k]);
    24                 }
    25             }
    26         }
    27     }
    28     printf("%d
    ",dp[m]);
    29     return 0;
    30 }
  • 相关阅读:
    P1265 公路修建 最小生成树
    P1991 无线通讯网 最小生成树
    Stock Chase 拓扑
    Rank of Tetris 拓扑排序+并查集
    P1169 [ZJOI2007]棋盘制作 DP悬线法
    P4147 玉蟾宫 二维DP 悬线法
    P1341 无序字母对 欧拉回路
    P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm 记忆化搜索dfs
    BSTestRunner插件的用法.py
    Selenium
  • 原文地址:https://www.cnblogs.com/wsy107316/p/14087798.html
Copyright © 2011-2022 走看看