I need a offer题目链接
学习了其他人的才会的用Java复述一遍
首先,对于概率问题,如果直接从正面考虑会比较麻烦,不知直接从反面考虑不被offer 的概率。这是一道dp题,dp过了没啥问题,问题是贪心的代码也过了。。。。。。。尴尬并且测试数据有的dp和贪心结果不同,discuss里有。
dp :01背包问题,核心就是每当多一所学校时,看钱够不够,如果够,就比较采纳和不采纳这所学校的概率,如果不够,就不采纳。状态转移方程:
dp[钱数][学校数]=dp[i][j];
if(i-a[j]>=0) dp[i][j]=min(dp[i][j-1],dp[i-a[j]][j-1]*(1-b[j]));等于号要有,有的大学可能不要钱
else dp[i][j]=dp[i][j-1];
还有注意的是初始化问题,初始应该为1而不是0,因为刚开始肯定不被offer,所以不被offfer概率为1,注意的就是初始dp[0][学校数]的时候看看这所学校是不是免费的,如果是免费的,那么概率就是1-b[j];(如果还有,就是(1-b[j])*b[j2])等等。
附上代码如下:

import java.util.Scanner;
/** dp算法*/
public class 杭电1203 {public static void main(String[] args){        Scanner sc=new Scanner(System.in);while(sc.hasNext()){int n=sc.nextInt();//钱数int m=sc.nextInt();//数据个数if(m==0&&n==0) {break;}float dp[][]=new float[n 1][m 1];int a[]=new int[m 1];//钱float b[]=new float[m 1];//概率for(int i=1;i=0){dp[i][j]=min(dp[i][j-1],dp[i-a[j]][j-1]*(1-b[j]));                 }elsedp[i][j]=dp[i][j-1];              }           }float value=(100-dp[n][m]*100);System.out.println(String.format("%.1f", value) "%");               }}private static float min(float d, float e) {// TODO 自动生成的方法存根return d>e?e:d;}
}

附上贪心法的代码:(贪心能过但是其实不对)

import java.util.Scanner;
/** 贪心算法*/
public class 杭电1203 {public static void main(String[] args){        Scanner sc=new Scanner(System.in);while(sc.hasNext()){int n=sc.nextInt();//钱数int m=sc.nextInt();//数据个数if(m==0&&n==0) {break;}int a[]=new int[m 1];float b[]=new float[m 1];float c[]=new float[m 1];int money=n;float sum=1;for(int i=1;i=a[i]) {sum=sum*(1-b[i]);money-=a[i];}}float value=(100-sum*100);System.out.println(String.format("%.1f", value) "%");}}
}

杭电1203java实现相关推荐

  1. 【杭电ACM】1097 A hard puzzle

    [杭电ACM]1097  A hard puzzle http://acm.hdu.edu.cn/showproblem.php?pid=1097 先用int手写了算法结果竟然wrong answer ...

  2. 【ACM】杭电OJ 1106 函数atoi

    函数atoi是把字符串转化成整数的函数,头文件为 #include "stdlib.h" e.g. 运行环境:Dev-C++ 5.11 杭电1106 调用了sort函数,运行的时间 ...

  3. 【ACM】杭电OJ 2037

    题目链接:杭电OJ 2037 先把b[i]进行排序,然后,b[i]与a[i+1]进行比较. #include <iostream> #include <cstdio> #inc ...

  4. 【ACM】杭电OJ 2020(排序)

    题目链接:杭电OJ 2020 排序可以有冒泡排序,选择排序,或者直接调用函数. 下面是选择排序: #include <stdio.h> #include <math.h> in ...

  5. 【ACM】杭电OJ 2018

    题目链接:杭电OJ 2018 从n>4开始,每一年的牛的数量=前一年的牛的数量+三年前的牛的数量 问:为什么是三年前? 答:假设三年前有一头小牛出生,出生的那一年即为第一年,到了第四年,即三年后 ...

  6. 【ACM】杭电OJ 1005

     题目链接:杭电OJ 1005 超时代码如下(而且开辟的数组空间大小不够): #include <stdio.h> int m[100000]; int f(int n,int a,int ...

  7. 【ACM】杭电OJ 1004

     题目链接:杭电OJ 1004 运行环境:Dev-C++ 5.11 思路: 先把先把num数组全部赋值为1:第一个颜色单独输入,从第二个开始,需要与前面的进行比较,如果前面有相同的颜色,则在目前的nu ...

  8. 【ACM】杭电OJ 2012。

    题目链接:杭电OJ 2012 思路很简单,但是有一种高效算法显示编译错误,不知道为什么 运行环境:VS2017 AC代码: #include <stdio.h> #include < ...

  9. 【ACM】杭电OJ 1003。

    运行环境VS2017  题目链接:杭电OJ 1003 主要思想是: 用d[i]来存放前i项中最大的和,得到end,然后再倒推,得起始的位置begin 然而在程序42行的疑问,大家可以讨论一下吗???? ...

最新文章

  1. 【extjs6学习笔记】1.1 初始:创建项目
  2. android 详细构建过程,Android构建模块详细步骤概述
  3. python中turtle画酷炫图案-酷炫的动态可视化交互大屏,用Excel就能做!
  4. 《系统集成项目管理》第十三章 项目合同管理
  5. 前端学习(3344):数组方法的总结和应用
  6. 一不小心节约了 591 台机器!
  7. java array 元素的位置_208道高频 Java面试题答案2
  8. 我密集面试了若干位Java后端的候选人,给广大程序员的一点建议
  9. 将win7笔记本电脑变身WiFi热点,让手机、ipad共享上网!
  10. 途牛 “特产频道”上线 深化目的地服务网络
  11. opencv摄像头异常处理
  12. sql 错误码 备用
  13. android studio 报错 AAPT: error: style attribute ‘attr/colorPrimary (aka com.
  14. phpword模板替换并插入表格
  15. 离散数学 2.3 Functions
  16. 人力资源领域RPA的应用场景
  17. 每日一题——判断素数
  18. 配置Json-Server
  19. Python到底是干啥的?
  20. 微信小程序 模块化注意

热门文章

  1. 百度超级链XChain(12)平行链与群组
  2. (chap1 web网络基础) TCP/IP协议层
  3. 作业调度算法--短作业优先 操作系统_处理器管理_编程题
  4. 删除有序数组中的重复项(数组去重)
  5. python通过requirements.txt文件批量安装依赖包的实现步骤
  6. 进程间通信——命名管道
  7. 2020-11-18(如何打开.jar工具)
  8. Windows保护模式学习笔记(八)—— 页目录表基址/页表基址
  9. 8、MySQL表锁、行锁和页锁
  10. Spring boot配置嵌入式Servlet容器