Problem Description
我们定义如下矩阵:
1/1 1/2 1/3
1/2 1/1 1/2
1/3 1/2 1/1
矩阵对角线上的元素始终是1/1,对角线两边分数的分母逐个递增。
请求出这个矩阵的总和。
 
Input
每行给定整数N (N<50000),表示矩阵为 N*N.当N为0时,输入结束。
 
Output
输出答案,保留2位小数。
 
Sample Input
1
2
3
4
0
 
Sample Output
1.00
3.00
5.67
8.83
 
 
一看,大水题,马上来了个循环,然后计算 n/2的,得到复杂度O(n/2*n),提上去发现,TLE...我靠!
然后想了想,发现这题可以dp过去.恩....这下子肯定可以过了吧!!!?
 
dp的过程如下图:
n==2时:
1/1 1/2             
1/2 1/1   
n==3时:
1/1 1/2 1/3
1/2 1/1 1/2
1/3 1/2 1/1
 
容易看出
n==3时,dp[3] = dp[2] - dp[1] + dp[2] + 2*(1/n)
化简一下,推导出:
dp[n]=2*dp[n-1]-do[n-2] + (2/n)
 
接着快速的敲了Java代码,过了样例,提上去..一个大大的WA!!!!!!!!!!!!!!!!
然后把float改成了double,发现居然是两个不同的答案,再提交一次,还是WA.....(无奈,需要去恶补一下Java的浮点运算)
 
然后很无奈的换C敲一遍.....就AC了.....无奈无奈无奈
C Code:
#include <stdio.h>
double dp[];
int main(){
int n;
dp[]=;
dp[]=; for(int i=;i<=;i++){
dp[ i ] = * dp[ i - ] - dp[ i - ] + ( 2.0 / i );
}
while(scanf("%d",&n)== && n){
printf("%.2lf\n",dp[n]);
}
}
顺便给上Java的 WA code:
 
import java.util.Scanner;

public class Main {

    public static double[] dp = new double[ 50001 ];

    public static void dp() {
dp[ 1 ] = 1;
dp[ 2 ] = 3;
for( int i = 3; i <= 50000; i++ ) {
dp[ i ] = 2 * dp[ i - 1 ] - dp[ i - 2 ] + ( 2.0 / i );
}
} public static void main( String[] args ) {
Scanner sc = new Scanner( System.in );
dp();
while( sc.hasNext() ) {
int n = sc.nextInt();
if( n == 0 )
return;
else {
System.out.printf( "%.2f\n", dp[ n ] );
}
}
}
}

求Java老司机讲解下为何卡浮点呀。。。。

 
 
 
 
 
 
 

[hdu2156]分数矩阵的更多相关文章

  1. HDU_2156 分数矩阵

    Problem Description             我们定义如下矩阵:            1/1 1/2 1/3            1/2 1/1 1/2            1 ...

  2. HDOJ(HDU) 2156 分数矩阵(嗯、求和)

    Problem Description 我们定义如下矩阵: 1/1 1/2 1/3 1/2 1/1 1/2 1/3 1/2 1/1 矩阵对角线上的元素始终是1/1,对角线两边分数的分母逐个递增. 请求 ...

  3. HDU 2156 分数矩阵

    http://acm.hdu.edu.cn/showproblem.php?pid=2156 Problem Description 我们定义如下矩阵:1/1 1/2 1/31/2 1/1 1/21/ ...

  4. 问题 A: 分数矩阵

    题目描述 我们定义如下矩阵:1/1 1/2 1/31/2 1/1 1/21/3 1/2 1/1矩阵对角线上的元素始终是1/1,对角线两边分数的分母逐个递增.请求出这个矩阵的总和. 输入 输入包含多组测 ...

  5. 基于MapReduce的SimRank++算法研究与实现

    一.算法应用背景 计算广告学(Computational Advertising)是一门广告营销科学,以追求广告投放的收益最大化为目标,重点解决用户与广告匹配的相关性和广告的竞价模型问题,涉及到自然语 ...

  6. 洛谷P1074 靶形数独(算竞进阶习题)

    还是数独.. 比上一个多了个分数矩阵,其实没什么差别,但是数据好像水了许多... #include <bits/stdc++.h> #define INF 0x3f3f3f3f using ...

  7. 《TC训练赛一》题解!

    以下题目标题就是此题题目链接,题目内容为了节省篇幅就不粘上去了.整套题的链接:https://acm.bnu.edu.cn/v3/contest_show.php?cid=8679#info 密码:7 ...

  8. 用深度学习做命名实体识别(七)-CRF介绍

    还记得之前介绍过的命名实体识别系列文章吗,可以从句子中提取出人名.地址.公司等实体字段,当时只是简单提到了BERT+CRF模型,BERT已经在上一篇文章中介绍过了,本文将对CRF做一个基本的介绍.本文 ...

  9. LPAT: Learning to Predict Adaptive Threshold for Weakly-supervised Temporal Action Localization [Paper Reading]

    Motivation: 阈值分割的阈值并没有通过模型训练学出来,而是凭借主观经验设置,本文通过与背景得分比较提取对应的proposal,不用阈值的另一篇文章是Shou Zheng的AutoLoc,通过 ...

随机推荐

  1. excel计算后列填充

    先鼠标选中一个要输出的地方,输入=,然后就可以输入计算的公示,然后按enter,然后鼠标放在这个框的右下角变成十字,然后双击,就填充整列了.

  2. js原生设计模式——6复杂对象的构建—Builder建造者模式

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  3. javascript window.confirm确认 取消对话框实现代码小结

    本文章讲述的三种都是基于了javascript confirm提示确认框的做法了,只是在不同的地方写哦,有需要的同学可参考一下   confirm() 方法 confirm() 方法用于显示一个带有指 ...

  4. delphi 预览图片2 (MouseUP)

    这个是自己项目在使用的,所以带有些业务功能的代码. 逻辑上使用的大多是 mouseup ,MouseMove,Mousedown.使用recttangle容器实现滑动.网上有这个下载demo. 另外移 ...

  5. CodeForces 446B

    DZY Loves Modification time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  6. ASP.Net数据库如何存取图片

    当我们有大量的图片或者图片比较大时,我们常规的做法可能是保存图片路径,但是也不排除需要将图片直接存放到数据库的情况,此时就需要保存图片到数据库了.这篇文章我会向大家介绍: 如何通过FileUpLoad ...

  7. Mac系统安装Aircrack-ng破解wifi密码(2)

    我们上一篇文章说过如何通过Aircrack-ng, 破解使用WPA/PSK加密方式的路由密码, 这一篇介绍的是使用Aircrack-ng破解使用WEP加密方式的路由密码: WEP和WPA/PSK的区别 ...

  8. HDU 3783 ZOJ

    ZOJ Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  9. 简学Python第一章__进入PY的世界

    #cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff ...

  10. vb是如何连接数据库的

    vb是如何连接数据库的         刚开始学习数据库时 ,对数据库很不了解,尤其是模块中的代码.照着抄都有很多错的,每一句到底是什么意思呢,根本不懂.于是我就花费了大量的时间去查每一句代码的具体作 ...