• 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;
    }
  • 相关阅读:
    ASP.NE网站发布注意事项
    jQuery中使用$.ajax提交表单
    DataTable类Clone及Copy方法的区别
    DataList控件使用初步
    一个非常标准的Java连接Oracle数据库的示例代码
    详细解析用C#写的小游戏《彩色连珠》(附源代码)
    VS 2010 复制代码到word出现乱码解决办法
    Java之简单的图片动态显示(实现类似GIF动画效果)
    Class.forName(String driverClassName)加载JDBC驱动程序时,底层都做了些什么???
    Java设计好看的窗体必加的代码(使用内置皮肤控件):
  • 原文地址:https://www.cnblogs.com/smilesundream/p/6642569.html
Copyright © 2020-2023  润新知