zoukankan      html  css  js  c++  java
  • hdu1712(分组背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1712

     分析:

                    典型的分组背包问题,如果不会的可以看一下背包九讲。

                    看下背包九讲中的描述:

                    for 所有的组k
                        forv=V..0
                           for 所有的i属于组k
                               f[v]=max{f[v],f[v-c[i]]+w[i]}

                    组别肯定是课程,体积就是天数,故我的代码:

                  for (i=0; i<n; i++)
                  for (j=m; j>0; j--)
                  for (k=0; k<=j; k++)
                  dp[j] = max(dp[j], dp[j-k] + val[i][k]);

       

    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <iostream>
    #include <algorithm>
    #include <queue>
    #include <cstdlib>
    #include <vector>
    #include <set>
    #include <map>
    #define LL long long
    #define inf 1<<30
    using namespace std;
    int val[110][110],dp[110];
    int n,m;
    int main()
    {
        while(scanf("%d%d",&n,&m)&&n&&m)
        {
            for(int i=1;i<=n;i++)
                for(int j=1;j<=m;j++)
                scanf("%d",&val[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<=j;k++) //遍历每组的物品
                dp[j]=max(dp[j],dp[j-k]+val[i][k]);
            printf("%d
    ",dp[m]);
        }
    }
    View Code
  • 相关阅读:
    LeetCode "Jump Game"
    LeetCode "Pow(x,n)"
    LeetCode "Reverse Linked List II"
    LeetCode "Unique Binary Search Trees II"
    LeetCode "Combination Sum II"
    LeetCode "Divide Two Integers"
    LeetCode "First Missing Positive"
    LeetCode "Clone Graph"
    LeetCode "Decode Ways"
    LeetCode "Combinations"
  • 原文地址:https://www.cnblogs.com/lienus/p/4121203.html
Copyright © 2011-2022 走看看