AOJ2272 Cicada
問題リンク Cicada
- 解法
典型的なDPです。
dp[i][j]: (i, j)からゴールに行くまでに会う蝉の最小数
という表を右下から埋めていくことで解けます。
- ソース
import java.util.Scanner; //Cicada public class AOJ2272 { void run(){ Scanner sc = new Scanner(System.in); int h = sc.nextInt(); int w = sc.nextInt(); char[][] m = new char[h][w]; int[][] c = new int[h][w]; for(int i=0;i<h;i++)m[i]=sc.next().toCharArray(); for(int i=0;i<h;i++)for(int j=0;j<w;j++)c[i][j]=m[i][j]-'0'; int[][] dp = new int[h][w]; dp[h-1][w-1]=c[h-1][w-1]; for(int j=w-2;j>=0;j--)dp[h-1][j]=dp[h-1][j+1]+c[h-1][j]; for(int i=h-2;i>=0;i--)dp[i][w-1]=dp[i+1][w-1]+c[i][w-1]; for(int i=h-2;i>=0;i--)for(int j=w-2;j>=0;j--)dp[i][j] = c[i][j] + Math.min(dp[i+1][j], dp[i][j+1]); System.out.println(dp[0][0]); } public static void main(String[] args) { new AOJ2272().run(); } }