The 2015 China Collegiate Programming Contest Game Rooms
Game Rooms
Time Limit: 4000/4000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
Your company has just constructed a new skyscraper, but you just noticed a terrible problem: there is only space to put one game room on each floor! The game rooms have not been furnished yet, so you can still decide which ones should be for table tennis and which ones should be for pool. There must be at least one game room of each type in the building.
Luckily, you know who will work where in this building (everyone has picked out offices). You know that there will be Ti table tennis players and Pi pool players on each floor. Our goal is to minimize the sum of distances for each employee to their nearest game room. The distance is the difference in floor numbers: 0 if an employee is on the same floor as a game room of their desired type, 1 if the nearest game room of the desired type is exactly one floor above or below the employee, and so on.
Input
The first line of the input gives the number of test cases, T(1≤T≤100). T test cases follow. Each test case begins with one line with an integer N(2≤N≤4000), the number of floors in the building. N lines follow, each consists of 2 integers, Ti and Pi(1≤Ti,Pi≤109), the number of table tennis and pool players on the ith floor. The lines are given in increasing order of floor number, starting with floor 1 and going upward.
Output
For each test case, output one line containing Case #x: y, where x is the test case number (starting from 1) and y is the minimal sum of distances.
Sample input and output
| Sample Input | Sample Output |
|---|---|
1 |
Case #1: 9 |
Hint
In the first case, you can build a table tennis game room on the first floor and a pool game room on the second floor. In this case, the 5 pool players on the first floor will need to go one floor up, and the 4table tennis players on the second floor will need to go one floor down. So the total distance is 9.
Source
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = + ;
long long dp[][maxn][] , cnt[][maxn][] , sum[maxn][];
int val[maxn][] , cur , n ; void updata(long long & x , long long v){
if(x==-) x = v;
else x = min( x , v );
} int main(int argc,char *argv[]){
int Case;
scanf("%d",&Case);
for(int cas = ; cas <= Case ; ++ cas){
cur = ; memset(dp[cur] , - , sizeof(dp[cur])) ; memset(cnt[cur] , ,sizeof(cnt[cur]));
scanf("%d",&n);
for(int i = ; i <= n ; ++ i){
scanf("%d%d",&val[i][] , &val[i][]);
for(int j = ; j < ; ++ j) sum[i][j] = sum[i-][j]+1LL*val[i][j];
}
cnt[cur][][] = val[][] , cnt[cur][][] = val[][] , dp[cur][][] = dp[cur][][] = ;
for(int i = ; i <= n ; ++ i){
int pre = cur ; cur ^= ; memset(dp[cur] , - , sizeof(dp[cur])); memset(cnt[cur] , ,sizeof(cnt[cur]));
for(int j = ; j < ; ++ j) cnt[cur][i][j]=val[i][j];
for(int j = ; j < i ; ++ j)
for(int k = ; k < ; ++ k){
cnt[cur][j][k] = cnt[pre][j][k] + sum[i][k] - sum[j-][k];
if(~dp[pre][j][k]){
if(j==){
updata( dp[cur][j][k],dp[pre][j][k]);
updata( dp[cur][i][k^] , dp[pre][j][k] + cnt[pre][][k^] + val[i][k]);
}
else{
long long extra = ;
if(((i+j)&)==) extra = val[(i+j)>>][k^]*1LL*(((i-j)>>)+);
updata( dp[cur][j][k] , dp[pre][j][k] + extra);
updata( dp[cur][i][k^] , dp[pre][j][k] + cnt[pre][(i+j+)>>][k^] + val[i][k]);
}
}
}
}
long long ans = min( dp[cur][n][] , dp[cur][n][]);
for(int i = ; i < n ; ++ i)
{
for(int k = ; k < ; ++ k){
long long add = ;
int end = (n + i + ) >> ;
for(int j = n ; j >= end ; -- j){
add += val[j][k^] * 1LL* (j - i + );
}
ans = min( ans , dp[cur][i][k] + add);
}
}
printf("Case #%d: %lld\n",cas,ans);
}
return ;
}
The 2015 China Collegiate Programming Contest Game Rooms的更多相关文章
- The 2015 China Collegiate Programming Contest A. Secrete Master Plan hdu5540
Secrete Master Plan Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Othe ...
- The 2015 China Collegiate Programming Contest K Game Rooms hdu 5550
Game Rooms Time Limit: 4000/4000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total ...
- The 2015 China Collegiate Programming Contest C. The Battle of Chibi hdu 5542
The Battle of Chibi Time Limit: 6000/4000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Othe ...
- The 2015 China Collegiate Programming Contest L. Huatuo's Medicine hdu 5551
Huatuo's Medicine Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others ...
- The 2015 China Collegiate Programming Contest H. Sudoku hdu 5547
Sudoku Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Subm ...
- The 2015 China Collegiate Programming Contest G. Ancient Go hdu 5546
Ancient Go Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total ...
- The 2015 China Collegiate Programming Contest E. Ba Gua Zhen hdu 5544
Ba Gua Zhen Time Limit: 6000/4000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total ...
- The 2015 China Collegiate Programming Contest D.Pick The Sticks hdu 5543
Pick The Sticks Time Limit: 15000/10000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others ...
- The 2015 China Collegiate Programming Contest -ccpc-c题-The Battle of Chibi(hdu5542)(树状数组,离散化)
当时比赛时超时了,那时没学过树状数组,也不知道啥叫离散化(貌似好像现在也不懂).百度百科--离散化,把无限空间中无限的个体映射到有限的空间中去,以此提高算法的时空效率. 这道题是dp题,离散化和树状数 ...
随机推荐
- scroll pagination.js数据重复加载、分页问题
scroll pagination.js数据重复加载.分页问题 解决办法 参考资料: http://blog.csdn.net/dyw442500150/article/details/1753242 ...
- java.lang.NoSuchFieldError: INSTANCE
java.lang.NoSuchFieldError: INSTANCE异常,可能是包重复了. 我遇到的情况是maven里引入了一个JAR,而我又在lib里面引入了这个jar,并且版本还不相同,就出了 ...
- iOS 时区问题总结 NSTimeZone
基本概念 GMT 0:00 格林威治标准时间; UTC +00:00 校准的全球时间; CCD +08:00 中国标准时间 [来自百度百科] 夏时制,英文"DaylightSavingTim ...
- for 的多重循环--java
for的多重循环--java 利用for的多重循环打印出四种不同的三角形的图案. 图案如下: 4种不同三角形图案打印如下------------------******---------------- ...
- C++中的static成员
C++中的static 成员永远是我心中的痛,记了好多次了,但是今天在项目中依然忘记了,今天写下来,方便以后不用再去Baidu.google搜索了. 在头文件中声明静态成员 static int i; ...
- Java基础知识强化45:StringBuffer类之字符串反转的案例
1. 案例演示: package cn.itcast_07; import java.util.Scanner; /* * 把字符串反转 */ public class StringBufferTes ...
- Chrome Browser
set default search engine as follow for force encrypted searching: https://encrypted.google.com/sear ...
- box-shadow全面解析
一.box-shadow语法: box-shadow: none | inset(可选值,不设置,为外投影,设置,为内投影) x-offset(阴影水平偏移量,正方向为right) y-offset( ...
- POJ1276:Cash Machine(多重背包)
Description A Bank plans to install a machine for cash withdrawal. The machine is able to deliver ap ...
- Mysql创建函数出错
目前在项目中,执行创建mysql的函数出错, mysql 创建函数出错信息如下: Error Code: 1227. Access denied; you need (at least one of) ...