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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

百练OJ:4150:上机

發布時間:2025/3/19 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 百练OJ:4150:上机 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

描述

又到周末了,同學們陸陸續續開開心心的來到機房上機。jbr也不例外,但是他到的有點晚,發現有些機位上已經有同學正在做題,有些機位還空著。細心的jbr發現,一位同學來到機房,坐在機位i上,如果他的左右兩邊都空著,他將獲得能力值a[i];如果當他坐下時,左邊或者右邊已經有一個人在上機了,他將獲得能力值b[i];如果當他坐下時,他的左邊右邊都有人在上機,他將獲得能力值c[i]。

同時他發現,已經在上機的同學不會受到剛要坐下的同學的影響,即他們的能力值只會在坐下時產生,以后不會發生變化;第一個機位左邊沒有機位,最后一個機位右邊沒有機位,無論何時坐在這兩個機位上將無法獲得c值。

這時jbr發現有一排機器還空著,一共有N個機位,編號1到N。這時有N位同學們陸陸續續來到機房,一個一個按照順序坐在這排機位上。聰明的jbr想知道怎么安排座位的順序,可以使這N位同學獲得能力值的和最大呢?

輸入

第一行一個整數N(1<= N <= 10000)

第二行N個數,表示a[i]

第三行N個數,表示b[i]

第四行N個數,表示c[i]

(1<= a[i],b[i],c[i] <=10000)

輸出

一個整數,表示獲得最大的能力值和

樣例輸入

4 1 2 2 4 4 3 3 1 2 1 1 2

樣例輸出

14

提示

第一位同學坐在第四個機位上,獲得能力值4;
第二位同學坐在第三個機位上,獲得能力值3;
第三位同學坐在第二個機位上,獲得能力值3;
第四位同學坐在第一個機位上,獲得能力值4;
總和為14。

代碼

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int[] a = new int[n + 2];int[] b = new int[n + 2];int[] c = new int[n + 2];for (int i = 1; i <= n; i++) {a[i] = scanner.nextInt();}for (int i = 1; i <= n; i++) {b[i] = scanner.nextInt();}for (int i = 1; i <= n; i++) {c[i] = scanner.nextInt();}//f[0][i]表示第i個座位進入時 第i+1個座位上沒有人//f[1][i]表示第i個座位進入時 第i+1個座位上有人//所以f[0][i+1]=max(f[0][i]+b[i+1], f[1][i] + a[i+1])//首先f[0][i+1]的f[0]確保i+2位置沒有人,所以如果i有人就是f[0][i]+b[i+1],如果i無人就是f[1][i] + a[i+1]int f[][] = new int[2][n + 1];f[0][1] = a[1];f[1][1] = b[1];for (int i = 2; i <= n; i++) {f[0][i] = Math.max(f[0][i - 1] + b[i], f[1][i - 1] + a[i]);f[1][i] = Math.max(f[0][i - 1] + c[i], f[1][i - 1] + b[i]);}System.out.println(f[0][n]);}}

結果

Accepted

總結

以上是生活随笔為你收集整理的百练OJ:4150:上机的全部內容,希望文章能夠幫你解決所遇到的問題。

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