ZOJ 3331 Process the Tasks

双塔DP。

#include<cstdio>
#include<cstring>
#include<queue>
#include<string>
#include<algorithm>
#include<map>
#include<iostream>
using namespace std;

const int maxn=100+50;
int T,n;
int dp[maxn][2*maxn];
int a[maxn],b[maxn];

void init()
{
    for(int i=1;i<=n;i++)
        for(int j=0;j<=200;j++)
            dp[i][j]=0x7fffffff;
}

void read()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d%d",&a[i],&b[i]);
}

void work()
{
    dp[1][a[1]+100]=dp[1][0-b[1]+100]=0;

    for(int i=2;i<=n;i++)
    {
        for(int j=0;j<=200;j++)
        {
            if(dp[i-1][j]==0x7fffffff) continue;
            int tmp=j-100;
            if(tmp>=0)
            {
                dp[i][a[i]+100]=min(dp[i][a[i]+100],dp[i-1][j]+tmp);
                if(b[i]>=tmp) dp[i][tmp-b[i]+100]=min(dp[i][tmp-b[i]+100],dp[i-1][j]+tmp);
                else if(b[i]<tmp) dp[i][tmp-b[i]+100]=min(dp[i][tmp-b[i]+100],dp[i-1][j]+b[i]);
            }

            else if(tmp<0)
            {
                tmp=-tmp;
                if(dp[i-1][j]+tmp<dp[i][0-b[i]+100]) dp[i][0-b[i]+100]=min(dp[i][0-b[i]+100],dp[i-1][j]+tmp);
                if(a[i]<=tmp) dp[i][a[i]-tmp+100]=min(dp[i][a[i]-tmp+100],dp[i-1][j]+a[i]);
                else if(a[i]>tmp) dp[i][a[i]-tmp+100]=min(dp[i][a[i]-tmp+100],dp[i-1][j]+tmp);
            }
        }
    }

    int ans=0x7fffffff;
    for(int j=0;j<=200;j++)
    {
        if(dp[n][j]==0x7fffffff) continue;
        ans=min(ans,dp[n][j]+abs(j-100));
    }
    printf("%d\n",ans);
}

int main()
{
    scanf("%d",&T);
    while(T--)
    {
        read();
        init();
        work();
    }
    return 0;
}
时间: 2024-10-28 15:15:56

ZOJ 3331 Process the Tasks的相关文章

Java Secure Socket Extension (JSSE) Reference Guide

Skip to Content Oracle Technology Network Software Downloads Documentation Search Java Secure Socket Extension (JSSE) Reference Guide This guide covers the following topics: Skip Navigation Links Introduction Features and Benefits JSSE Standard API S

Java多线程系列--“JUC线程池”04之 线程池原理(三)

本章介绍线程池的生命周期. 线程有5种状态:新建状态,就绪状态,运行状态,阻塞状态,死亡状态.线程池也有5种状态:然而,线程池不同于线程,线程池的5种状态是:Running, SHUTDOWN, STOP, TIDYING, TERMINATED. 线程池状态定义代码如下: /** * The main pool control state, ctl, is an atomic integer packing * two conceptual fields * workerCount, indi

Java并发基础(六) - 线程池

Java并发基础(六) - 线程池 1. 概述 这里讲一下Java并发编程的线程池的原理及其实现 2. 线程池的基本用法 2.1 线程池的处理流程图 该图来自<Java并发编程的艺术>: 从图中我们可以看出当一个新任务到线程池时,线程池的处理流程如下: 线程池首先判断线程池里面线程数是否达到核心线程数.如果不是则直接创建新线程作为核心线程来执行该任务(该线程作为核心线程不会由于任务的完成而销毁),否则进入下一流程. 判断阻塞队列是否已经满了.如果没满则将该任务放入阻塞队列中,等待核心线程处理,

Celery - Best Practices

If you've worked with Django at some point you probably had the need for some background processing of long running tasks. Chances are you've used some sort of task queue, and Celery is currently the most popular project for this sort of thing in the

在top命令下kill和renice进程

For common process management tasks, top is so great because it gives an overview of the most active processes currently running (hence the name top). This enables you to easily find processes that might need attention. From top, you can also perform

QtGui.QProgressBar

A progress bar is a widget that is used when we process lengthy tasks. It is animated so that the user knows that the task is progressing. The QtGui.QProgressBar widget provides a horizontal or vertical progress bar in PyQt4 toolkit. The programmer c

J.U.C--线程池ThreadPoolExecutor

这一篇博文主要讲解关于Java的线程池相关的内容,主要包括: (1) Executor接口以及其子接口 (2)Executor的生命周期 (3)Executors (4)任务拒绝策略 (5)线程池 ThreadPoolExecutor实现原理 1. Executor接口以及其子接口 首先来看一下线程池相关类与接口的体系结构图: 上面系很清晰显示了线程池中的常用类和接口之间关系,下面首先看看最基础的Executor接口: public interface Executor { /** * Exec

网页版迅雷离线下载过程分析

1. 登陆 迅雷离线下载的第一步需要使用账号登陆,网页的登陆页面是: http://lixian.xunlei.com/login.html 首先,迅雷服务器验证账号和密码的地址为: https://login.xunlei.com/sec2login https://login2.xunlei.com/sec2login https://login3.xunlei.com/sec2login 以上任意一个地址(服务器)都可以验证,迅雷离线页面采取某种算法随机选择一个. 然后,向服务器提交的数据

从C10K问题来看常见的中小型服务器I/O模型

问题描述: 关于C10问题的经典描述可以查看这个网页 http://www.kegel.com/c10k.html 具体来说就是服务器如何处理10k个客户端的并发连接,即 concurrent 10,000 connection .如果在很早以前互联网还不普及的时候,一个服务器很少会同时出现有10k的连接,但是现在互联网高速发展,这种规模的连接可能随处可见,所以如何来解决C10k的问题对于服务提供者来说是一个最先需要解决的问题.有人可以说现在硬件成本很低,连接增多可能会消耗很大的内存那么我扩充内