[TOJ 2663] Concert Hall Scheduling

作为一家著名音乐厅的新任总监,你需要通过高效的房间调度算法来避免破产。面对众多的音乐会申请,采用最大费用最大流算法来最大化全年收入。
You are appointed director of a famous concert hall, to save it from bankruptcy. The hall is very popular, and receives many requests to use its two fine rooms, but unfortunately the previous director was not very efficient, and it has been losing money for many years. The two rooms are of the same size and arrangement. Therefore, each applicant wishing to hold a concert asks for a room without specifying which. Each room can be used for only one concert per day.

In order to make more money, you have decided to abandon the previous fixed price policy, and rather let applicants specify the price they are ready to pay. Each application shall specify a period [i, j] and an asking price w, where i and j are respectively the first and last days of the period (1 ≤ ij ≤ 365), and w is a positive integer in yen, indicating the amount the applicant is willing to pay to use a room for the whole period.

You have received applications for the next year, and you should now choose the applications you will accept. Each application should be either accepted for its whole period or completely rejected. Each concert should use the same room during the whole applied period.

Considering the dire economic situation of the concert hall, artistic quality is to be ignored, and you should just try to maximize the total income for the whole year by accepting the most profitable applications.

Input

The input has multiple data sets, each starting with a line consisting of a single integer n, the number of applications in the data set. Then, it is followed by n lines, each of which represents one application with a period [i, j] and an asking price w yen in the following format.

i   j   w

A line containing a single zero indicates the end of the input.

The maximum number of applications in a data set is one thousand, and the maximum asking price is one million yen.

Output

For each data set, print a single line containing an integer, the maximum total income in yen for the data set.

Sample Input

4
1 2 10
2 3 10
3 3 10
1 3 10
6
1 20 1000
3 25 10000
5 15 5000
22 300 5500
10 295 9000
7 7 6000
8
32 251 2261
123 281 1339
211 235 5641
162 217 7273
22 139 7851
194 198 9190
119 274 878
122 173 8640
0

Output for the Sample Input

30
25500

38595

将每天拆点成开始和结束,使用房间的情况当作流量,正常情况什么也不做直接向下一天连边,无费用,或者是从某一天的开始到另一天的结尾表示占用此房间,费用为收益,做最大费用最大流即可。

#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int inf=1010101010;
int n,m;
struct edge
{
    int v,c,w,next;
}e[150000];
int head[40000],cnt;
void addedge(int u,int v,int c,int w)
{
    e[cnt].v=v;
    e[cnt].c=c;
    e[cnt].w=w;
    e[cnt].next=head[u];
    head[u]=cnt++;
    e[cnt].v=u;
    e[cnt].c=0;
    e[cnt].w=-w;
    e[cnt].next=head[v];
    head[v]=cnt++;
}
int a[40000],b[40000];
int S,T;
int dis[100010];
bool vis[100010];
int pre[100010];
int pos[100010];
int gao()
{
     int ans=0;
     while(1){
      for(int i=0;i<=T;i++) dis[i]=-1,vis[i]=0,pre[i]=i,pos[i]=0;
      queue<int> q;
      dis[S]=0;
      q.push(S);
      vis[S]=1;
      int u,v,w,c;

        while(!q.empty())
        {
            u=q.front();
            q.pop();
            vis[u]=0;
            for(int i=head[u];i!=-1;i=e[i].next)
            {
                v=e[i].v;
                if(e[i].c>0&&dis[v]<dis[u]+e[i].w)
                {

                    pre[v]=u;
                    pos[v]=i;
                    dis[v]=dis[u]+e[i].w;
                    //cout<<u<<" "<<v<<dis[v]<<endl;
                    if(!vis[v])
                    {
                        vis[v]=1;
                        q.push(v);
                    }

                }
            }

         }
         //cout<<"kk"<<endl;
         if(dis[T]==-1) break;
         //cout<<dis[T]<<"jj"<<endl;
         int sum=inf;
         for(u=T;u!=S;u=pre[u])
         {
             c=e[pos[u]].c;
             sum=min(sum,c);
         }
         for(u=T;u!=S;u=pre[u])
         {
             e[pos[u]].c-=sum;
             e[pos[u]^1].c+=sum;
             ans+=sum*e[pos[u]].w;
         }
     }
     return ans;
}
int main()
{
    int t;
    //cin>>t;
    while(cin>>n,n)
    {
        memset(head,-1,sizeof(head));
        cnt=0;
        S=0;T=366;
        for(int i=0;i<366;i++)
          addedge(i,i+1,2,0);
        int x,y,w;
        while(n--)
        {
            cin>>x>>y>>w;
            addedge(x,y+1,1,w);
        }

        cout<<gao()<<endl;
    }
}


代码下载地址: https://pan.quark.cn/s/bc087ffa872a "测控电路课后习题详解"文件.pdf是一份极具价值的学术资料,其中系统地阐述了测控电路的基础理论、系统构造、核心特性及其实际应用领域。 以下是对该文献的深入解读和系统梳理:1.1测控电路在测控系统中的核心功能测控电路在测控系统的整体架构中扮演着不可或缺的角色。 它承担着对传感器输出信号进行放大、滤除杂音、提取有效信息等关键任务,并且依据测量与控制的需求,执行必要的计算、处理与变换操作,最终输出能够驱动执行机构运作的指令信号。 测控电路作为测控系统中最具可塑性的部分,具备易于放大信号、转换模式、传输数据以及适应多样化应用场景的优势。 1.2决定测控电路精确度的关键要素影响测控电路精确度的核心要素包括:(1)噪声与干扰的存在;(2)失调现象与漂移效应,尤其是温度引起的漂移;(3)线性表现与保真度水平;(4)输入输出阻抗的特性影响。 在这些要素中,噪声干扰与失调漂移(含温度效应)是最为关键的因素,需要给予高度关注。 1.3测控电路的适应性表现测控电路在测控系统中展现出高度的适应性,具体表现在:* 具备选择特定信号、灵活实施各类转换以及进行信号处理与运算的能力* 实现模数转换与数模转换功能* 在直流与交流、电压与电流信号之间进行灵活转换* 在幅值、相位、频率与脉宽信号等不同参数间进行转换* 实现量程调整功能* 对信号实施多样化的处理与运算,如计算平均值、差值、峰值、绝对值,进行求导数、积分运算等,以及实现非线性环节的线性化处理、逻辑判断等操作1.4测量电路输入信号类型对电路结构设计的影响测量电路的输入信号类型对其电路结构设计产生显著影响。 依据传感器的类型差异,输入信号的形态也呈现多样性。 主要可分为...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值