zoukankan      html  css  js  c++  java
  • HDU

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

    题意:给你n个课程,每个课程有很多种学习方法,用的时间和取得的效果都不一样,现在你只有m天时间用来学习了,问你这m天时间能取到的最大值是多少

    思路:  分组背包模板,把每个课程的学习方法看成一个分组,然后每个课程取一个最优的学习方法

    分组背包讲解

    其实和01背包是一个道理,只是他多了一个分组,要只能在分组里面取一个

    我们只要把01背包稍稍改一下,多一层循环来枚举分组,在一个分组里面枚举去找当前容量最优的选择

    #include<bits/stdc++.h>
    #define maxn 105
    #define mod 1000000007
    using namespace std;
    typedef long long ll;
    ll dp[maxn];
    ll n,m;
    ll mp[maxn][maxn];
    int main(){
        while(cin>>n>>m){
            ll x;
            if(n==0&&m==0) break;
            memset(dp,0,sizeof(dp));
            for(int i=1;i<=n;i++){
                for(int j=1;j<=m;j++){
                    cin>>x;
                    mp[i][j]=x;
                }
            } 
            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]+mp[i][k]);//在所有物品中取当前容量的max
                    }
                }
            }
            cout<<dp[m]<<endl;
        }
    }
  • 相关阅读:
    git安装和使用
    GitHub入门
    jmeter入门
    this关键字
    ES6函数
    代码雨
    this指向练习题
    a标签阻止默认跳转行为事件
    模板引擎的应用
    面向对象
  • 原文地址:https://www.cnblogs.com/Lis-/p/11049060.html
Copyright © 2011-2022 走看看