练习3-Q

原创 2016年05月31日 11:01:54

题目:Problem Q

Problem Description
Many years ago , in Teddy’s hometown there was a man who was called “Bone Collector”. This man like to collect varies of bones , such as dog’s , cow’s , also he went to the grave …<br>The bone collector had a big bag with a volume of V ,and along his trip of collecting there are a lot of bones , obviously , different bone has different value and different volume, now given the each bone’s value along his trip , can you calculate out the maximum of the total value the bone collector can get ?<br><center><img src=../../../data/images/C154-1003-1.jpg> </center><br>

Input
The first line contain a integer T , the number of cases.<br>Followed by T cases , each case three lines , the first line contain two integer N , V, (N <= 1000 , V <= 1000 )representing the number of bones and the volume of his bag. And the second line contain N integers representing the value of each bone. The third line contain N integers representing the volume of each bone.

Output
One integer per line representing the maximum of the total value (this number will be less than 2<sup>31</sup>).

Sample Input
1 5 10 1 2 3 4 5 5 4 3 2 1

Sample Output
14

题意:

01背包问题,往体积为V的背包里放体积和价值不同的东西,求背包被放满时的最大价值;

思路:

只考虑第i件物品放或不放,如果第i件物品可以放得开,则其动态转移方程为
dp[i][j] = max(dp[i-1][j], dp[i-1][j-vo[i]]+va[i]);
其中i表示第i件物品,j表示放入第i件物品后的体积。

代码:

# include <iostream>
# include <string.h>
# include <algorithm>

using namespace std;

int dp[1001][1001];



int main()
{
    int va[1001], vo[1001];
    int T;
    cin >> T;
    while(T--)
    {
        memset(va,0,sizeof(va));
        memset(vo,0,sizeof(vo));
        memset(dp,0,sizeof(dp));
        int N, V;
        cin >> N >> V;
        for(int i = 1;i <= N; i++)
            cin >> va[i];
        for(int i = 1;i <= N; i++)
            cin >> vo[i];


        for(int i = 1;i <= N; i++)
        {
            for(int j = 0;j <= V; j++)
            {
                if(vo[i] <= j)
                    dp[i][j] = max(dp[i-1][j], dp[i-1][j-vo[i]]+va[i]);
                else
                    dp[i][j] =dp[i-1][j];
            }
        }

        /*for(int i = 1;i <= N; i++)
        {
            for(int j = 0;j <= V; j++)
                cout << dp[i][j] << " ";
            cout << endl;
        }*/
            cout << dp[N][V]<<endl;
    }

    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Show me the code之Python练习册 Q1~3 优惠券

""" 问题:将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果 常用库:图像处理的库:PIL 安装pillow库: ...

奇虎360软件阻止腾讯电脑管家启动,3Q大战将再度上演?

前几年闹得沸沸扬扬的3Q大战将再度上演?

Q123:PBRT-V3,各种形式的“光传播方程”的推导依据

PBRT-V3中提到如下几种形式的光传播方程: 立体角形式; 表面形式; 路径形式;相关参考博文: Q72:渲染方程(Rendering Equation) Q121:PBRT-V3,光传播...

VS1005 VS1005g-q-f – MP3 音频系列级芯片,中文翻译资料

VS1005是目前世界上最集成的音频编解码芯片,是VLSI最新推出的旗舰产品。 概述: VS1005 是一片灵活的音频平台器件。它基于 VS_DPS4 构件,这是一个功能强大的DSP(数 字信...

Q3DSurface 文档翻译

本文由博主翻译自Qt助手5.8.0类的描述Q3DSurface类提供了渲染3D表面图的方法。 该类使开发者不仅能够渲染3D表面图,而且可以自由地对视图进行旋转和缩放。 一些表面图的视觉属性,如绘制...

漫谈3Q大战

上周末去北理工讲《从Hogwarts到Matrix》。台下有人问:最近360和腾讯两个厂商就这样在用户的电脑上互相斗,用户该怎么办? 我说:中学历史讲的日俄战争大家还记得吧。日本和俄国打,而战场却在...

手Q体验不满意的地方之(3)——个人设置栏

说到手Q的个人设置栏,槽点太多了。这个设计我觉得很不好了,这个设计很明显就是让用户思考!点开左上角的那个个人头像,首先一般人就不会去点什么个人头像,用户习惯性把这个当做仅仅是一种展示而已,没想到点到这...

Q133:PBRT-V3,BSSRDF的采样(15.4章节)

前续:Q132:PBRT-V3,BSSRDF(双向散射表面反射分布函数)(5.6.2章节、11.4章节) 从Q132中,咱知道了在给定(po, wo, pi, wi)的情况下怎么求解S(po, wo...

Q127:PBRT-V3,理解“体渲染”积分器的关键竟然是这张图

“体渲染”积分器是在“路径追踪”积分器的基础上考虑了场景中的介质,相当于是对“路径追踪”积分器的拓展。 所以,在学习“体渲染”积分器之前,得有“路径追踪”积分器的基础。参考: Q124:PBRT-...

Q91:真实地模拟透明材质(Realistic Transparency)(3)——A Glass of Water

1,理论分析   怎么画一杯水呢? 场景中涉及三种介质:空气(eta_air)、玻璃(eta_glass)、水(eta_water)。 在用trace的过程中,需要特别注意的是:介质边界面的法...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)