AOJ0573 Night Market
問題リンク Night Market
- 解法
DPです。
dp[i][j]: 夜店iまでを使って時刻jまでで得られる最大満足度
という表を埋めれば解けます。
夜店iを時間jに遊び終えるように訪れるとき、花火を見逃すようなら夜店で遊べません。
- ソース
import java.util.Scanner; //Night Market public class AOJ0573 { void run(){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(), T = sc.nextInt(), S = sc.nextInt(); int[] a = new int[n], b = new int[n]; for(int i=0;i<n;i++){ a[i] = sc.nextInt(); b[i] = sc.nextInt(); } int[][] dp = new int[n][T+1]; for(int j=b[0];j<=T;j++){ dp[0][j] = dp[0][j-1]; if(!(j-b[0]<S&&S<j))dp[0][j] = a[0]; } for(int i=1;i<n;i++)for(int t=1;t<=T;t++){ dp[i][t] = Math.max(dp[i-1][t], dp[i][t-1]); if(b[i]<=t&&!(t-b[i]<S&&S<t))dp[i][t] = Math.max(dp[i][t], dp[i-1][t-b[i]]+a[i]); } System.out.println(dp[n-1][T]); } public static void main(String[] args) { new AOJ0573().run(); } }