日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

杭电1203java实现

發布時間:2025/3/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 杭电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; /** 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) "%");}} } 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的杭电1203java实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。