JOI本選過去問 第11回 日本情報オリンピック本選 2問目 たのしいカードゲーム
どう見ても解法わるい
#include <cstdio> #include <algorithm> using namespace std; int alen = 0,blen = 0; short ans = 0; short a[5003] = {0}; short b[5003] = {0}; short dp[5003][5003] = {0}; int main(){ scanf("%d %d ",&alen,&blen); for(int i = 0;i < alen;i++){ scanf("%hd",&a[i]); } for(int i = 0;i < blen;i++){ scanf("%hd",&b[i]); } for(int j =0;j < blen;j++){ for(int i = 0;i < alen;i++){ if(a[i] == b[j]){ int nau = i - 1; short int mmm = 0; while(nau>=0){ if(j-1 < 0) break; mmm = max(mmm,dp[nau][j-1]); nau--; } dp[i][j] = mmm + 1; ans = max(ans,dp[i][j]); } } } printf("%d\n",ans); }