生活随笔
收集整理的這篇文章主要介紹了
杭电oj1257最少拦截系统—贪心/dp最大递增子序列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
附上題目鏈接:杭電oj1257
這個題目有動態規劃和貪心兩種解決方式。
貪心法1:
對于導彈我們知道只可以從大到小的反導,一個系統必須從大到小排列。那么我們就可以選擇從最高的那個導彈入手,往右找僅次于最高的那個導彈,標記(可使用boolean),一直找到最后一個導彈形成系統1。在重復找未被標記的最大往右找,形成系統二,一直到全被標記為止。代碼如下:
import java
.util
.ArrayList
;
import java
.util
.Arrays
;
import java
.util
.List
;
import java
.util
.Scanner
;
public class 杭電
1257 {public static void main(String
[] args
) {Scanner sc
= new Scanner(System
.in
);while (sc
.hasNext()) {int n
= sc
.nextInt();int a
[] = new int[n
];int b
[] = new int[n
];boolean c
[] = new boolean[n
];int count
= 0;for (int i
= 0; i
< n
; i
) {a
[i
] = sc
.nextInt();b
[i
] = i
;}for (int i
= 0; i
< n
; i
){for (int j
= i
; j
< n
; j
) {if (a
[i
] < a
[j
]) {int t
= a
[i
];a
[i
] = a
[j
];a
[j
] = t
;t
= b
[i
];b
[i
] = b
[j
];b
[j
] = t
;}}}for (int i
= 0; i
< n
; i
) {if (c
[i
] == false) {int s
= b
[i
];for (int j
= i
; j
< n
; j
) {if (b
[j
] >= s
&& c
[j
] == false) {c
[j
] = true;s
= b
[j
];}}count
;}}System
.out
.println(count
);}}
}
貪心法二:學習惡狼干爹方法
算法思想:
建立足夠大的系統數,導彈從左到右一個一個來。
第一個形成系統1.
第二個看看是否比第一個小,如果小,則進入系統1.如果比第一個大,則新建系統二。
若完成攔截,則此攔截系統的最大攔截變為這個高度
若未攔截成功,則新建系統,最高攔截度為這個數
核心是使用數組儲存數據。
import java
.util
.*
; class 杭電
1257{ public static void main(String
[] args
){ int n
,i
,x
,numb
,m
,k
; int[] system
=new int[100000];Scanner sc
=new Scanner(System
.in
); boolean haveSystem
;while(sc
.hasNext()){ numb
=0;n
=sc
.nextInt(); for(i
=0;i
<n
;i
){ m
=sc
.nextInt(); haveSystem
=false; for(k
=0;k
<=numb
;k
){if(m
<=system
[k
]){ system
[k
]=m
; haveSystem
=true; break; } } if(!haveSystem
){system
[ numb
]=m
; } } System
.out
.println(numb
); } }
}
動態規劃法:
求最大遞增子序列
import java
.util
.Scanner
;public class 杭電
1257 {public static void main(String
[] args
){Scanner sc
=new Scanner(System
.in
);while(sc
.hasNext()){int max
=0;int n
=sc
.nextInt();int dp
[]=new int[n
];int a
[]=new int[n
];for(int i
=0;i
<n
;i
){a
[i
]=sc
.nextInt();}dp
[0]=1;for(int i
=1;i
<n
;i
){int m
=0;for(int j
=0;j
<i
;j
){if(dp
[j
]>m
&&a
[j
]<a
[i
]){m
=dp
[j
]; }dp
[i
]=m
1;if(max
<dp
[i
]){max
=dp
[i
];}}}System
.out
.println(max
);}}}
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的杭电oj1257最少拦截系统—贪心/dp最大递增子序列的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。