• hdoj1529


    Problem : 1529 ( Cashier Employment )     Judge Status : Accepted
    RunId : 2664468    Language : G++    Author : huwenbiao
    Code Render Status : Rendered By HDOJ G++ Code Render Version 0.01 Beta
    /***************************************************************\
    *Author:Hu Wenbiao
    *Created Time: Thu 22 Jul 2010 06:10:59 PM CST
    *File Name: main.cpp
    *Description:差分约束系统
    \***************************************************************/

    //*========================*Head File*========================*\\

    #include<iostream>
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    /*----------------------*Global Variable*----------------------*/
    struct
    E{
    int
    s,e,len;
    //起点,终点,长度
    }edges[100];
    int
    R[
    26],num[26],ans,T,N,cnt,dist[26],t;
    //*=======================*Main Program*=======================*//
    using namespace std;

    bool
    bellman_ford(){
    int
    _cnt=cnt;
    int
    s,e,len;
    edges[_cnt].s=
    0;
    edges[_cnt].e=
    24;
    edges[_cnt].len=ans;
    _cnt++;
    for
    (int i=
    1;i<=8;i++){//S[i]-S[i+16]>=R[i] (1<=i<=8)
    edges[_cnt].s=i+16;
    edges[_cnt].e=i;
    edges[_cnt].len=R[i]-ans;
    _cnt++;
    }

    memset(dist,
    0,sizeof(dist));
    dist[
    24]=ans;
    for
    (int i=
    0;i<72;i++){//这儿我不知道为什么24不行,有大牛知道的话麻烦告诉一下
    bool
    flag=
    true;
    for
    (int j=
    0;j<_cnt;j++){
    s=edges[j].s,e=edges[j].e,len=edges[j].len;
    if
    (dist[e]<dist[s]+len){
    //求最长路径
    flag=false;
    dist[e]=dist[s]+len;
    }
    }

    if
    (flag)break;
    }

    return
    ans==dist[
    24];
    }

    int
    main(){

    //freopen("input","r",stdin);
    scanf("%d",&T);
    while
    (T--){
    memset(num,
    0,sizeof(num));
    for
    (int i=
    1;i<=24;i++)//时间全加1
    scanf("%d",R+i);
    scanf(
    "%d",&N);
    for
    (int i=
    0;i<N;i++){
    scanf(
    "%d",&t);
    num[t+
    1]++;
    }

    cnt=
    0;//标记边数
    for(int i=1;i<=24;i++){//S[i]-S[i-1]>=0 (1<=i<=24)
    edges[cnt].s=i-1;
    edges[cnt].e=i;
    edges[cnt].len=
    0;
    cnt++;
    }

    for
    (int i=
    1;i<=24;i++){//S[i]-S[i-1]<=num[i] (1<=i<=24)
    edges[cnt].s=i;
    edges[cnt].e=i-
    1;
    edges[cnt].len=-num[i];
    cnt++;
    }

    for
    (int i=
    1;i<24;i++){//S[i]-S[0]>=0 (1<=i<=23,24在bellman_ford()函数里)
    edges[cnt].s=0;
    edges[cnt].e=i;
    edges[cnt].len=
    0;
    cnt++;
    }

    for
    (int i=
    9;i<=24;i++){//S[i]-S[i-8]>=R[i] (9<=i<=24,
    //1~8涉及到S[24],在bellman_ford()函数里)
    edges[cnt].s=i-8;
    edges[cnt].e=i;
    edges[cnt].len=R[i];
    cnt++;
    }

    ans=N;
    if
    (!bellman_ford())
    printf(
    "No Solution\n");
    else
    {
    int
    s=
    0,t=N;
    ans=(t+s)/
    2;
    while
    (s<t){
    //二分
    if(bellman_ford()){
    t=ans;
    ans=(s+t)/
    2;
    }

    else
    {
    s=ans+
    1;
    ans=(s+t)/
    2;
    }
    }

    printf(
    "%d\n",ans);
    }
    }
    }
  • 相关阅读:
    logstash 收集nginx 日志 linux
    logstash 收集nginx 日志 windows
    记一次大坑,淘宝联盟百川登录授权方式
    Python常用库
    这个 MySQL bug 让我大开眼界
    备胎是这样转正的---浅谈keepalived工作原理
    vite首次启动加载慢
    frpc启动时提示:login to server failed: EOF
    OSCP整理笔记
    HikariCP连接池监控指标实战
  • 原文地址:https://www.cnblogs.com/Open_Source/p/1904917.html
Copyright © 2020-2023  润新知