HLOJ429 配置魔药

8人阅读 评论(0) 收藏 举报
分类:

题目

题目描述
在《Harry Potter and the Chamber of Secrets》中,Ron的魔杖因为坐他老爸的Flying Car撞到了打人柳,不幸被打断了,从此之后,他的魔杖的魔力就大大减少,甚至没办法执行他施的魔咒,这为Ron带来了不少的烦恼。
这天上魔药课,Snape要他们每人配置一种魔药(不一定是一样的),Ron因为魔杖的问题,不能完成这个任务,他请Harry在魔药课上(自然是躲过了Snape的检查)帮他配置。 现在Harry面前有两个坩埚,有许多种药材要放进坩埚里,但坩埚的能力有限,无法同时配置所有的药材。一个坩埚相同时间内只能加工一种药材,但是不一定每一种药材都要加进坩埚里。加工每种药材都有必须在一个起始时间和结束时间内完成(起始时间所在的那一刻和结束时间所在的那一刻也算在完成时间内),每种药材都有一个加工后的药效。
现在要求的就是Harry可以得到最大的药效。
输入格式
输入文件的第一行有2个整数,一节魔药课的t(1≤t<≤500)和药材数n(1≤n≤100)。
输入文件第2行到n+1行中每行有3个数字,分别为加工第i种药材的起始时间t1、结束时间t2、(1≤t1≤t2≤t)和药效w(1≤w≤100)。
输出格式
只有一行,只输出一个正整数,即为最大药效。

题解

这道题目是一个双进程的01背包。
设出状态

f[i][j]ij
对于每一种魔药我们都有三个状态:

  1. 放进第一个锅
  2. 放进第二个锅
  3. 不放入锅

所以我们可以写出状态转移方程:

  1. f[j][k]=max(f[j][k],f[a[i].t11][k]+a[i].w)
  2. f[j][k]=max(f[j][k],f[j][a[i].t11]+a[i].w)
  3. f[j][k]=max(f[j1][k],f[j][k1])

状态转移方程理解了之后,我们有一个后效性的问题。
我们上面的方程,显然要保证f[i][j]f[k][l]先更新(i<kj<l)

这里有个小贪心,直接把所有的魔药根据时间后端点排序就行了。

code

#include<bits/stdc++.h>
using namespace std;
inline int read()
{
    int num = 0;
    char c = ' ';
    bool flag = true;
    for(;c > '9' || c < '0';c = getchar())
    if(c == '-')
    flag = false;
    for(;c >= '0' && c <= '9';num = num*10+c-48,c=getchar());
    return flag ? num : -num;
}
const int maxn=110;
int t,n;
struct node
{
    int t1,t2,w;
}a[maxn];
bool mycmp(node a,node b)
{
    return a.t2<b.t2;
}
void init()
{
    t=read();n=read();
    for(int i=1;i<=n;i++)
    {
        a[i].t1=read();
        a[i].t2=read();
        a[i].w=read();
    }
    sort(a+1,a+1+n,mycmp);
}
const int maxt=520;
int f[maxt][maxt];
void DP()
{
    for(int i=1;i<=n;i++)
        for(int j=t;j>=0;j--)
            for(int k=t;k>=0;k--)
            {
                if(j>=a[i].t2) 
                    f[j][k]=max(f[j][k],f[a[i].t1-1][k]+a[i].w);
                if(k>=a[i].t2)
                    f[j][k]=max(f[j][k],f[j][a[i].t1-1]+a[i].w);
            }
    printf("%d\n",f[t][t]);
}
int main()
{
    init();
    DP();
    return 0;
}
查看评论

【动态规划】【RQ99】配置魔药

题目描述【问题描述】在《Harry Potter and the Chamber of Secrets》中,Ron的魔杖因为坐他老爸的Flying Car撞到了打人柳,不幸被打断了,从此之后,他的魔杖...
  • liveas
  • liveas
  • 2010-04-21 17:34:00
  • 2046

配置魔药(DP)

配置魔药 【问题描述】 在《Harry Potter and the Chamber of Secrets》中,Ron的魔杖因为坐他老爸的Flying Car撞到了打人柳,不幸被打断了,从...
  • sinat_34550050
  • sinat_34550050
  • 2016-10-07 06:13:55
  • 153

RQNOJ 99 配置魔药

RQNOJ 99 配置魔药
  • WJSoier
  • WJSoier
  • 2017-09-02 16:38:00
  • 98

Harry Potter最终版的驾临

00年疯狂的迷上了这个魔法世界,到07的7月21号,一切悬疑将会解开。昨天在第三极书局预定了Harry potter and the Deathly Hallows 。我的HP英文版收藏将迎来第七位成...
  • alton0856
  • alton0856
  • 2007-06-03 19:49:00
  • 493

美国科学家用黄芪研制出“返老还童”药剂

【搜狐科学消息】据英国《每日邮报》报道,生老病死谁都无法避免,特别是衰老,常常会让人们感到十分恐惧。皮肤是人类衰老的一个重要标准。在人生长的一生中,皮肤会从婴儿时期的细腻,到青年时期的紧致,最终到老年...
  • ifeon
  • ifeon
  • 2011-08-31 09:38:46
  • 678

rnqoj-99-配置魔药-dp

比较好的题目~~ dp[j][k]: 第一个容器在第i秒和第二个容器在第j秒,所产生的最大魔力. if(num[i].t2 if(num[i].t2 #include #include...
  • rowanhaoa
  • rowanhaoa
  • 2013-10-12 11:36:30
  • 1271

配置魔药(双线程序列动态规划)

配置魔药问题描述: 在《Harry Potter and the Chamber of Secrets》中,Ron的魔杖因为坐他老爸的Flying Car撞到了打人柳,不幸被打断了,从此之后,他的魔...
  • cax1165
  • cax1165
  • 2016-10-05 19:34:26
  • 351

配置魔药(medic.pas/c/cpp)

配置魔药 (medic.pas/c/cpp) 【问题描述】 在《Harry Potter and the Chamber of Secrets》中,Ron的魔杖因为坐他老爸的Flying Car...
  • jie_guale
  • jie_guale
  • 2011-08-30 19:40:49
  • 1367

配置魔药(dp-双进程)

根据求什么设什么原则,f[k][i][j]表示放第k种魔药、第一个坩埚时间为i、第二个坩埚时间为j时的最大药效。 设第k种药的起始时间为a[k].st,结束时间为a[k].sw。 那么可得状态...
  • hfl030
  • hfl030
  • 2018-03-13 20:38:58
  • 10

SSL P2147 配置魔药___dp

题目大意: 魔法课时,Harry面前有两个坩埚,有许多种药材。一个坩埚相同时间内只能加工一种药材,但是不一定每一种药材都要加进坩埚里。魔法课的时间只有t,有N种药材,会给出加工第i种药材的起始时间t...
  • Gx_Man_VIP
  • Gx_Man_VIP
  • 2018-01-17 20:34:40
  • 91
    博客专栏
    数论

    文章:16篇

    阅读:1734
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 1万+
    积分: 1453
    排名: 3万+
    友情链接!