zoukankan      html  css  js  c++  java
  • hdu 1712 ACboy needs your help 裸的泛化物品

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

    裸的泛化物品

    泛化物品的意思就是物品的价值是变化的 取决于你给它多少花费

    学习自背包九讲第八讲

    dp[i][j]表示前i件物品共分配j花费的情况下能得到的最大值

    三层循环 

    第一层是物品 第二层是枚举总花费 第三层是枚举最新的一层占总花费的数目

    用滚动数组来实现

    #include <cstdio>
    #include <cstdlib>
    #include <ctime>
    #include <iostream>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    #include <stack>
    #include <set>
    #include <queue>
    #include <vector>
    
    using namespace std;
    
    typedef long long ll;
    
    const int maxn = 110;
    
    int a[maxn][maxn];
    int dp[2][maxn];
    
    int main()
    {
        //freopen("in.txt", "r", stdin);
    
        int n, m;
        while(scanf("%d%d", &n, &m) == 2 && n != 0)
        {
            for(int i = 1; i <= n; i++)
                for(int j = 1; j <= m; j++)
                    scanf("%d", &a[i][j]);
    
            int cur = 0;
    
            for(int i = 1; i <= m; i++)
            {
                dp[cur][i] = a[1][i];
            }
    
            for(int i = 2; i <= n; i++)
            {
                memset(dp[cur^1], 0, sizeof(dp[cur^1]));
    
                for(int j = 1; j <= m; j++)
                {
                    for(int k = 0; k <= j; k++)
                    {
                        dp[cur^1][j] = max(dp[cur^1][j], dp[cur][k] + a[i][j-k]);
                    }
                }
    
                cur = cur ^ 1;
            }
    
            int ans = 0;
            for(int i = 1; i <= m; i++)
            {
                ans = max(ans, dp[cur][i]);
            }
    
            printf("%d
    ", ans);
        }
    
        return 0;
    }
  • 相关阅读:
    脚本添加crontab任务
    docker mysql8 注意
    使用 logrotate 清理日志
    腾讯云cos对象在线显示
    快速部署私人git服务--基于docker化Gogs
    grep 使用
    vsftpd 新增虚拟用户
    unistd.h
    ffmpeg
    H264视频压缩算法
  • 原文地址:https://www.cnblogs.com/dishu/p/4296348.html
Copyright © 2011-2022 走看看