zoukankan      html  css  js  c++  java
  • [洛谷U871]building

    题目来源:http://www.luogu.org/problem/show?pid=U871#
    【题目背景 Background】
    WOW是BLIZZARD公司开发的一款网络游戏,游戏的背景是处在一个叫做艾泽拉斯的神秘大陆上的。在这片陆地上生活着许多不同种族不同部落的奇幻生物,暗夜精灵就是其中的一员。他们拥有高深的科技和强大的魔法,但却因为性格的冷傲孤僻而不被其他种族所接受。为了改善这种状况,半神塞纳留斯决定发展有暗夜精灵族特色的产业来吸引外族,他发现暗夜精灵的建筑风格深受世人青睐,因为它们都是古树的造型,且具有一种神奇的魔力,就是在占地面积不变的情况下可以自由改变形状,使得建筑之间完全没有空隙。
     【题目描述 Description】
    于是,他将这一艰巨的任务交给了部落中最具天赋的工程师守望者玛维,让他在一块面积为n(0<=n<=100)的土地上建造若干个建筑,这些建筑都有各自的占地面积q(0<=q<=100),价格p(0<=w<=100)和魅力值v(0<=v<=100)。就暗夜精灵当前掌握的科技来看,他们可以建造m(0<=m<=100)种建筑,为了不使游客感到乏味,每一种建筑规定最多只能建一座。
    你的任务就是替玛维想出一种选择建造的方案,使得最多用k(0<=k<=100)的金钱,在面积为n的土地上建出的建筑具有最高的魅力值。
     【输入输出格式 Input/output】
    输入格式:
    第一行有三个数m,n,k;以下有m行,分别包含了m种建筑的占地面积q,价格p和魅力值v。
    输出格式:
    仅有一个数,为最高魅力值。
     输入输出样例 Sample input/output
    样例测试点#1
    输入样例: 

    5 12 11
    4 3 3
    3 2 6
    2 4 2
    6 3 7
    5 5 6

    输出样例:

    15

    【思路】

      二维费用的背包问题,DP方程:f[j,d]:=max(f[j,d],f[j-q[i],d-p[i]]+v[i]);

    var q,p,v:array[0..10000] of longint;
        n,i,m,k,d,j:longint;
        f:array[-1000..1000,-1000..1000] of longint;
    
    function max(x,y:longint):longint;
    begin
        if x<y then exit(y) else exit(x);
    end;
    
    begin
        fillchar(f,sizeof(f),0);
        readln(m,n,k);
        for i:=1 to m do
            readln(q[i],p[i],v[i]);
        for i:=1 to m do
            for j:=n downto q[i] do
                for d:=k downto p[i] do
                    f[j,d]:=max(f[j,d],f[j-q[i],d-p[i]]+v[i]);
        writeln(f[n,k]);
    end.
  • 相关阅读:
    正则表达式-入门初探
    pytorch 对变长序列的处理
    数位DP小结
    impala 使用记录
    2017微软第二场笔试题解
    一次分清:jvm内存结构|jmm|java对象模型
    JMM-java内存模型
    java基础总结
    有关秒杀的一点思考
    Elasticsearch 启动报了TypeError: can’t dup Fixnum 错
  • 原文地址:https://www.cnblogs.com/yangqingli/p/4718009.html
Copyright © 2011-2022 走看看