属于简单题,由题目理解为从最右下角的开始引爆,然后由此引爆的都递归的引爆.而且先引爆上面或先引爆左边的,不影响结果.用cin估计要超时,scanf不会超时.
#include <iostream>
#include <string>
using namespace std;
int m, n;
int a[1001][1001];
void explode(int x, int y)

...{
int i, j, k;
int t = a[x][y];
a[x][y] = 0;
for (i=x-1; i>=0; --i)

...{
if(a[i][y] > 0)
explode(i, y);
}
for (j=y-1, k=t; j>=0&&k>0; --j,--k)

...{
if(a[x][j] > 0)
explode(x, j);
}
}
int main()

...{
int i, j;
while (scanf("%d%d",&n, &m) != EOF)

...{
for (i=0; i<n; ++i)

...{
for (j=0; j<m; ++j)

...{
scanf("%d",&a[i][j]);
}
}
int cnt = 0;
for (i=n-1; i>=0; --i)

...{
for (j=m-1; j>=0; --j)

...{
if(a[i][j] > 0)

...{
++cnt;
explode(i, j);
// cout << i << " " << j << endl;
}
}
}
printf("%d ", cnt);

}
return 0;
}