AtCoder Beginner Contestの過去問から、その提出コードの解答例です。
AtCoderとは、コンテストを通じて、プログラミングやアルゴリズムを学習するサービスです。
atcoder.jp
プログラミングコンテストとは、「与えられた問題をいかに素早く、正確に」解くことができるかを競うものです。
「競技プログラミング」を略して、「競プロ」などと呼ばれています。
#E - Balanced Path
僕が作成、提出したコードは、以下のとおりです。
/* AtCoder Problems in C++ #E - Balanced Path https://atcoder.jp/contests/abc147/tasks/abc147_e 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; ll n,m,a[90][90]; bool dp[90][90][13000]; int main(void){ cin>>n>>m; for(ll i=1;i<=n;i++){ for(ll j=1;j<=m;j++){ cin>>a[i][j]; } } for(ll i=1;i<=n;i++){ for(ll j=1;j<=m;j++){ ll b; cin>>b; a[i][j]=abs(a[i][j]-b); } } dp[1][1][a[1][1]]=true; for(ll i=1;i<=n;i++){ for(ll j=1;j<=m;j++){ if(i==n && j==m){ for(ll k=0;k<=12800;k++){ if(dp[i][j][k]){ cout<<k<<endl; return 0; } } } for(ll k=0;k<=12800;k++){ if(!dp[i][j][k]){ continue; } dp[i+1][j][k+a[i+1][j]]=true; dp[i+1][j][abs(k-a[i+1][j])]=true; dp[i][j+1][k+a[i][j+1]]=true; dp[i][j+1][abs(k-a[i][j+1])]=true; } } } }
AtCoder Beginner Contestは、オンラインジャッジによるプログラミングコンテストです。
日本語と英語に対応していて、週末ごとに実施されているみたいです。
https://practice.contest.atcoder.jp/tutorial
アカウントを登録すれば、誰でも参加できます。