Submission #3368008
Source Code Expand
using System; using System.Linq;//リストの使用 using System.Collections.Generic; class Program { static void Main() { string[] input = Console.ReadLine().Split(' ');//Splitで区切り文字を指定して複数個受け取る。 long a = long.Parse(input[0]); long b = long.Parse(input[1]); long[] numsL = Array.ConvertAll(Console.ReadLine().Split(' '),long.Parse); long[] numsR = Array.ConvertAll(Console.ReadLine().Split(' '),long.Parse); long[][] dp = new long[a+1][];//左l個、右r個取ったときの、先手の最高得点 for(long i = 0; i <= a; i++) { dp[i] = new long[b+1]; } for(long ll = 0; ll <= a; ll++) { for(long rr = 0; rr <= b; rr++) { if((ll+rr) % 2 == 1)//先手の番 { if(a == ll && rr-1 >= 0)//左が空の時 { dp[ll][rr] = dp[ll][rr-1] + numsR[rr-1]; } else if(b == rr && ll-1 >= 0)//右が空の時 { dp[ll][rr] = dp[ll-1][rr] + numsL[ll-1]; }else { if(ll+rr > 0) dp[ll][rr] = 0; if(ll-1 >= 0) dp[ll][rr] = Math.Max(dp[ll-1][rr] + numsL[ll-1], dp[ll][rr]); if(rr-1 >= 0) dp[ll][rr] = Math.Max(dp[ll][rr], dp[ll][rr-1] + numsR[rr-1]); } }else//後手の番 { if(a == ll && rr-1 >= 0)//左が空の時 { dp[ll][rr] = dp[ll][rr-1]; } else if(b == rr && ll-1 >= 0)//右が空の時 { dp[ll][rr] = dp[ll-1][rr]; }else { if(ll+rr > 0) dp[ll][rr] = long.MaxValue; if(ll-1 >= 0) dp[ll][rr] = Math.Min(dp[ll-1][rr], dp[ll][rr]); if(rr-1 >= 0) dp[ll][rr] = Math.Min(dp[ll][rr], dp[ll][rr-1]); } } } } Console.WriteLine(dp[a][b]); } }
Submission Info
Submission Time | |
---|---|
Task | B - ゲーム |
User | suikameron |
Language | C# (Mono 4.6.2.0) |
Score | 0 |
Code Size | 1912 Byte |
Status | WA |
Exec Time | 37 ms |
Memory | 22056 KB |
Judge Result
Set Name | All | ||||
---|---|---|---|---|---|
Score / Max Score | 0 / 3 | ||||
Status |
|
Set Name | Test Cases |
---|---|
All | 00, 01, 02, 90, 91 |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
00 | AC | 22 ms | 11220 KB |
01 | WA | 34 ms | 22056 KB |
02 | WA | 37 ms | 19168 KB |
90 | AC | 22 ms | 9172 KB |
91 | AC | 22 ms | 11220 KB |