题目是中文的,我就不描述题意了。
题目用到的主要算法是状态压缩dp。

思路是,我们要知道n行最多的炮数,只要知道n-2行所有状态最多的炮数,就可以根据n-1行和n行最多可行的状态算出。也就是说,n-2行以前的炮无论怎样放,都不会影响到第n行炮的放法。
  1POJ 1185 解题报告 炮兵阵地
  2POJ 1185 解题报告 炮兵阵地#include <cstdio>
  3POJ 1185 解题报告 炮兵阵地#include <cmath>
  4POJ 1185 解题报告 炮兵阵地#include <cstdlib>
  5POJ 1185 解题报告 炮兵阵地
  6POJ 1185 解题报告 炮兵阵地const int large = (int)pow( 210 );
  7POJ 1185 解题报告 炮兵阵地int n,m;
  8POJ 1185 解题报告 炮兵阵地char map[105][15];
  9POJ 1185 解题报告 炮兵阵地int dp[60][60][101];
 10POJ 1185 解题报告 炮兵阵地int stack[large];
 11POJ 1185 解题报告 炮兵阵地int len = 0;
 12POJ 1185 解题报告 炮兵阵地
 13POJ 1185 解题报告 炮兵阵地//now是当前行,last是上一行,n是行号。其中,now,last都是stack的下标,不是状态
 14POJ 1185 解题报告 炮兵阵地int Fun( int now, int last, int n )
 15



相关文章: