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): 3215    Accepted Submission(s): 1670


    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
     
    Source
     
    Recommend
    lcy   |   We have carefully selected several similar problems for you:  2639 2415 3535 3449 3496 
     
     1 //46MS    280K    552 B    C++
     2 /*
     3 
     4     题意: 
     5         有n个课程,m天时间,接下来n*m的矩阵表示该课程花费1~m天时间所获能得的价值,
     6     求花费m天时间能获得的最大价值
     7     
     8     背包:
     9         分组背包模板题..将每一天看成一个组,每组只能选一个。 
    10 
    11 */
    12 #include<stdio.h>
    13 #include<string.h>
    14 int a[105][105];
    15 int dp[105];
    16 int Max(int a,int b)
    17 {
    18     return a>b?a:b;
    19 }
    20 int main(void)
    21 {
    22     int n,m;
    23     while(scanf("%d%d",&n,&m),n+m)
    24     {
    25         memset(dp,0,sizeof(dp));
    26         for(int i=1;i<=n;i++)
    27             for(int j=1;j<=m;j++)
    28                 scanf("%d",&a[i][j]);
    29         for(int i=1;i<=n;i++)
    30             for(int j=m;j>=0;j--)
    31                 for(int k=1;k<=j;k++)
    32                     dp[j]=Max(dp[j],dp[j-k]+a[i][k]);
    33         printf("%d
    ",dp[m]);
    34     }
    35     return 0;
    36 } 
  • 相关阅读:
    ecmascript6入门
    优化代码,引发了早期缺陷导致新bug
    realm
    Hypervisor scheduler
    WEEX学习网站
    JavaScript while 循环
    JavaScript for 循环
    JavaScript switch 语句
    JavaScript If…Else 语句
    JavaScript 比较和逻辑运算符
  • 原文地址:https://www.cnblogs.com/GO-NO-1/p/3424333.html
Copyright © 2011-2022 走看看