杭电1203java实现
生活随笔
收集整理的這篇文章主要介紹了
杭电1203java实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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; /** 貪心算法*/ 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) "%");}} } 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的杭电1203java实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 杭电oj1176,2084java实现
- 下一篇: 杭电1260java实现