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题,离散化和树状数 ...
随机推荐
- facebook分享遇到的错误解决方法
*** Terminating app due to uncaught exception 'InvalidOperationException', reason: ''App ID not foun ...
- fstab的格式
# /etc/fstab/dev/hda8 swap swap defaults 0 0/dev/hda9 / ext2 defaults 1 1/dev/hda6 /wine vfat defaul ...
- OD: Exploit Me - Overwrite Nearby Varible
实验代码: #include<stdio.h> #include<string.h> #define PASSWORD "1234567" int veri ...
- django: template variable
模板变量用双大括号显示,如: <title>page title: {{title}}</title> 一 模板中使用变量 继续前面的例子,修改 index.html: < ...
- HTML5和CSS3实例教程[总结二]
基于contenteditable属性实现在位编辑 HTML5规范引入了contenteditable属性,它几乎可以用在任何元素上,只要添加这一属性 即可变为可编译区域 <!DOCTYPE h ...
- pd的django To Do List教程-----3:模板的建立
---恢复内容开始--- 1:在app下建立static文件夹并且放入bootstrap文件包以及一个写好的css文件style.css.文件目录如下: style.css代码: .form-cont ...
- (转)Facade模式
Facade模式要求一个子系统的外部与其内部的通信必须通过一个统一的Facade对象进行.Facade模式提供一个高层次的接口,使得子系统更易于使用. 就如同医院的接待员一样,Facade模式的Fac ...
- mac os 10.10下安装android studio问题:android studio was unable to find a valid jvm
友情提示:小编在做到这一步前,已经确定jdk和环境变量已经安装并配置无误,关于怎么检查java环境变量请自行百度. 原因分析:android studio安装包下的info.plist配置文件中有个关 ...
- Linux 开机报 or type Control-D to continue
解决步骤: 1.输入root密码 2.看是哪个盘报的错,我这边是sda3(可能会是不同的盘),就是代码中标为FAIL 输入以下命令fsck -y /dev/sda3
- 导出数据库中所有数据到Excle中
Workbook wb = new HSSFWorkbook();//创建工作簿 Connection conn = DataSourceUtils.getDataSource().getConnec ...