http://codeforces.com/problemset/problem/351/C

题意:有2*n个浮点数a1,a2,a3...a2*n,把他们分成n队,对于每对<A,B>,对A做floor() 操作,对B 做ceil()操作。生成b1...b2*n, 求|(b1+b2+...+b2*n)-(a1+a2+a3...+a2*n)|的最小值。

对于每个数ai,对他们做floor()的cost是up()=ai-floor(ai) ,做ceil()的cost是down()=ceil(ai)-ai

设f[i][j]表示前i个节点有j个做ceil()操作(i-j个floor())的最优值

  f[i][j]=min{f[i-1][j-1]+up(a[i]),   对ai做up()的代价

        f[i-1][j]+down(a[i])}   对ai做down()的代价、

当i == j时注意f[i-1][j]不存在这种情况.

这里的min{}里面比较的是绝对值。、

临界值f[0][0]=0; f[0][1]=0;目标答案|f[2*n][n]|。

#include <stdio.h>
#include <string.h>
#include <math.h>
#define N 2001
double min(double a,double b)
{
return fabs(a)>fabs(b)? b:a;
}
double up(double x)
{
return ceil(x)-x;
}
double down(double x)
{
return x-floor(x);
}
double a[*N+];
double f[*N+][N+];
int main()
{
int i,j,m,n;
while (scanf("%d",&n)!=EOF)
{
for (i=;i <=*n; i++)
scanf("%lf",&a[i]);
f[][]=;
f[][]=;
double tmp;
for (i=;i<=*n; i++)
for (j=; j<= n && j<=i;j++)
{
tmp=;
if (i>j) tmp=f[i-][j]+down(a[i]);
if (j>)
tmp=min(tmp,f[i-][j-]-up(a[i]));
f[i][j]=tmp;
} printf("%0.3lf\n",fabs(f[*n][n]));
}
return ;
}

好吧,其实仔细看看就是一个背包。

我们可以把i 这个维度,在空间上优化点。跟0/1背包似的。

f[j]=min{f[j-1]+up(a[i]),f[j]+down(a[i])}

不过j循环得downto了,因为f[j-1]在迭代前,还应该是f[i-1][j-1]这个状态,而不是f[i][j-1]了。

#include <stdio.h>
#include <string.h>
#include <math.h>
#define N 2001
//#define min(a,b) a>b?b:a
double min(double a,double b)
{
return fabs(a)>fabs(b)? b:a;
}
double up(double x)
{
return ceil(x)-x;
}
double down(double x)
{
return x-floor(x);
}
double a[*N+];
double f[N+];
int main()
{
int i,j,m,n;
while (scanf("%d",&n)!=EOF)
{
for (i=;i <=*n; i++)
scanf("%lf",&a[i]);
f[]=; f[]=;
double tmp;
for (i=;i<=*n; i++)
for (j=min(i,n);j>=;j--)
{
tmp=;
if (i>j) tmp=f[j]+down(a[i]);
if (j>)
tmp=min(tmp,f[j-]-up(a[i]));
f[j]=tmp;
//f[i][j]=min(f[i-1][j-1]+up(a[i]),f[i-1][j]+down(a[i]));
}
printf("%0.3lf\n",fabs(f[n]));
}
return ;
}

CF 351A - Jeff and Rounding DP的更多相关文章

  1. cf C. Jeff and Rounding

    http://codeforces.com/contest/352/problem/C 题意:给予N*2个数字,改变其中的N个向上进位,N个向下进位,使最后得到得数与原来数的差的绝对值最小 对每一个浮 ...

  2. CF&&CC百套计划3 Codeforces Round #204 (Div. 1) A. Jeff and Rounding

    http://codeforces.com/problemset/problem/351/A 题意: 2*n个数,选n个数上取整,n个数下取整 最小化 abs(取整之后数的和-原来数的和) 先使所有的 ...

  3. Codeforces Round #204 (Div. 2)->C. Jeff and Rounding

    C. Jeff and Rounding time limit per test 1 second memory limit per test 256 megabytes input standard ...

  4. CodeForces 352C. Jeff and Rounding(贪心)

    C. Jeff and Rounding time limit per test:  1 second memory limit per test: 256 megabytes input: stan ...

  5. CF 983B XOR-pyramid(区间dp,异或)

    CF 983B XOR-pyramid(区间dp,异或) 若有一个长度为m的数组b,定义函数f为: \(f(b) = \begin{cases} b[1] & \quad \text{if } ...

  6. CF 9D. How many trees?(dp)

    题目链接 以前做过类似的,USACO,2.3,开始数组开小了,导致数据乱了,然后超数据范围了,.. #include <cstdio> #include <iostream> ...

  7. CF 346B. Lucky Common Subsequence(DP+KMP)

    这题确实很棒..又是无想法..其实是AC自动机+DP的感觉,但是只有一个串,用kmp就行了. dp[i][j][k],k代表前缀为virus[k]的状态,len表示其他所有状态串,处理出Ac[len] ...

  8. CF 55D. Beautiful numbers(数位DP)

    题目链接 这题,没想出来,根本没想到用最小公倍数来更新,一直想状态压缩,不过余数什么的根本存不下,看的von学长的blog,比着写了写,就是模版改改,不过状态转移构造不出,怎么着,都做不出来. #in ...

  9. CF 149D Coloring Brackets 区间dp ****

    给一个给定括号序列,给该括号上色,上色有三个要求 1.只有三种上色方案,不上色,上红色,上蓝色 2.每对括号必须只能给其中的一个上色 3.相邻的两个不能上同色,可以都不上色 求0-len-1这一区间内 ...

随机推荐

  1. C++ <queue>用法

    C++队列可以不需要自己写,有现成的模版类 头文件: #include <queue> #include <iostream> using namespace std; (之前 ...

  2. python3虚拟环境应用

    python3自带虚拟环境venv,大致操作只有三步 1. 创建虚拟环境 python3 -m venv venv(名称随意) 2. 激活虚拟环境 source venv/bin/activate 3 ...

  3. axios在实际项目中的使用介绍

    1.axios本身就封装了各种数据请求的方法 执行 GET 请求 // 为给定 ID 的 user 创建请求 axios.get('/user?ID=12345') .then(function (r ...

  4. String HDU 5672(双指针)

    String HDU 5672(双指针) 传送门 题意:一个字符串中找到所有拥有不少于k个不同的字符的子串. import java.io.*; import java.util.*; public ...

  5. java连接数据库(经常用)

    一.配置环境 1.首先下载sqlserver2008驱动文件,找到sqljdbc4.jar文件,将这个文件拷到C:\Program Files\Java\jdk1.8.0_121\jre\lib\ex ...

  6. 玲珑杯 ACM Round #10

    A 题意:给长度为n的序列染黑白色,要求连续的黑的格子数量<=a,连续的白的格子数量<=b,问方案总数,有多个询问 分析:递推 注意数据范围,是可以O(n)做的,所以可以直接递推 B 题意 ...

  7. hihoCoder #27

    A QvQ B 题目:http://hihocoder.com/problemset/problem/1470 分析:dfs序+栈+数学 可以发现,对于每组询问,树上是有很多点都只能等于0的 对于每个 ...

  8. PHP中错误与异常的日志记录用法分析

    原文:http://www.jb51.net/article/89548.htm ----------------------------------------------------------- ...

  9. [JavaEE] Implement a test for REST endpoint

    1. We have the BookEndpoint.java: package com.pluralsight.bookstore.rest; import com.pluralsight.boo ...

  10. ORACLE database console无法登陆

    登陆EM时给我报这个错 Code d'erreur : ssl_error_weak_server_cert_key 仅仅须要关闭EM的SSL就好了 [oracle@ace-PROD1 ~]$ emc ...