zoukankan      html  css  js  c++  java
  • hdu 1712 ACboy needs your help

    ACboy needs your help

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 5516    Accepted Submission(s): 3004


    Problem Description
    ACboy has N courses this term, and he plans to spend at most M days on study.Of course,the profit he will gain from different course depending on the days he spend on it.How to arrange the M days for the N courses to maximize the profit?
     

    Input
    The input consists of multiple data sets. A data set starts with a line containing two positive integers N and M, N is the number of courses, M is the days ACboy has.
    Next follow a matrix A[i][j], (1<=i<=N<=100,1<=j<=M<=100).A[i][j] indicates if ACboy spend j days on ith course he will get profit of value A[i][j].
    N = 0 and M = 0 ends the input.
     

    Output
    For each data set, your program should output a line which contains the number of the max profit ACboy will gain.
     

    Sample Input
    2 2 1 2 1 3 2 2 2 1 2 1 2 3 3 2 1 3 2 1 0 0
     

    Sample Output
    3 4 6
     
    思路:分组背包
    深刻理解分组背包的三个循环
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int a[101][101],dp[101];
    int main()
    {
        int day,sub;
        while(~scanf("%d %d",&sub,&day)&&(sub&&day))
         {
             memset(a,0,sizeof(a));
             for(int i=1;i<=sub;i++)
                for(int j=1;j<=day;j++)
                    cin>>a[i][j];
             memset(dp,0,sizeof(dp));
             for(int i=1;i<=sub;i++)  //
                for(int j=day;j>=0;j--)   //对总的使用天数枚举dp[j]表示已使用完  j  天时的最大价值
                                                      //一定要逆序,因为后面dp[j-k]+a[i][k]可以发现后面的状态会使用到前面的初始                                                           //状态
                 for(int k=0;k<=j;k++)  //该处是对第i组的物品(花费天数)进行枚举,第i组花费天数<=总花费天数
             dp[j]=max(dp[j],dp[j-k]+a[i][k]);   //最优子结构,花费j天的条件下所能得到的最大价值
             cout<<dp[day]<<endl;
         }
         return 0;
    }
  • 相关阅读:
    linux常用命令使用指南
    小赢理财招聘 测试开发、专项
    小赢理财招聘 测试开发、专项
    【模板】普通平衡树
    about乘法逆元
    luogu P2234 [HNOI2002]营业额统计
    线性筛中求莫比乌斯函数‘
    欧拉函数
    围棋
    丛林中的路
  • 原文地址:https://www.cnblogs.com/smilesundream/p/6642569.html
Copyright © 2011-2022 走看看