zoukankan      html  css  js  c++  java
  • LETTers第五场Bone Collector解题报告

    题目描述:

        有一个爱收集骨头(不良癖好)的家伙,他有一个背包,容积是V。现在有n块骨头,每块骨头有两个属性:体积volume和价值value。问他能够收集的骨头的价值之和最大是多少。

    题面建模:

        简单背包问题。

        背包已用容积是j时,dp[j]=max(dp[j],dp[j-volumek]+valuek)。

        转移方程:dp[j]=dp[j]>dp[j-bone[i][1]]+bone[i][0]?dp[j]:dp[j-bone[i][1]]+bone[i][0];

    解题要点:

        注意边界的处理。

    时空开销分析:

        空间复杂度:O(n)。

        时间复杂度:O(n^2)。

    特别说明:

       无。

    程序:

    #include <stdio.h>
    #include <string.h>
    int bone[1010][2];
    int dp[1010];
    int main()
    {
        int n,v,t,max,i,j;
        scanf("%d",&t);
        while(t--)
        {
            memset(bone,0,sizeof(bone));
            memset(dp,0,sizeof(dp));
            scanf("%d %d",&n,&v);
            for(i=0;i<2*n;i++)
                scanf("%d",bone[i%n]+i/n);
            for(i=0;i<n;i++)
                for(j=v;j-bone[i][1]>=0;j--)
                    dp[j]=dp[j]>dp[j-bone[i][1]]+bone[i][0]?dp[j]:dp[j-bone[i][1]]+bone[i][0];
            printf("%d\n",dp[v]);
        }
        return 1;
    }
  • 相关阅读:
    RabbitMQ-RPC版主机管理程序
    FTP
    主机管理程序
    高级FTP
    选课系统
    电子银行购物商城
    计算器
    员工信息查询系统
    工资管理系统
    三级菜单
  • 原文地址:https://www.cnblogs.com/LETTers/p/2461032.html
Copyright © 2011-2022 走看看