6 条题解
-
5
一篇VERY多余的题解画草图后(图略),可得如下表格:(注意不要把分割区域的数量数错,否则你会
像我一样感到迷茫的。。)表格中,a 数组用于存储 当平面内有 n 条直线,且其中 m 条(原题目为 q 条,代码是我上课写的,懒得修改了)直线相交于同一点,则这 n 条直线最多能将平面分割成不同区域的数量; n 对应表格的列,表示 平面内直线的数量为 n 条; m 对应表格的行,表示 n 条直线中有 m 条直线相交于同一点
a[n][m] 1 2 3 4 5 6 ... 1 2 / / / / / ... 2 3 4 3 4 7 6 4 5 11 10 8 5 6 16 15 13 10 6 7 22 21 19 16 12 ... ... 观察表格,得出以下结论:
- m=1:
a[n][m] = n+1;
- m=n:
a[n][m] = n*2;
- 1<m<n:
a[n][m] = a[n-1][1]+a[n-1][m];
进行整理,编写代码:
#include<cstdio> using namespace std; int main(){ int n, m; scanf("%d%d", &n, &m); int const cn=n+1; int a[cn][cn]={}; for(int i=1; i<=n; i++){ a[i][1] = i+1; a[i][i] = i*2; for(int j=2; j<i; j++){ a[i][j] = a[i-1][1]+a[i-1][j]; } } printf("%d\n", a[n][m]); return 0; }
- m=1:
信息
- ID
- 404
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- 递交数
- 85
- 已通过
- 40
- 上传者