1466 简单动态规划
我觉得算不得完全意义的动态规划
求直线交点,把直线分2组,和第N条平行(N-M条)、不平行(M条)(0<=M<N)
则交点数 =(N-M)* M + M条的交点数;
#include <stdio.h>
#include <stdlib.h>
int res[21][200];
void add(int i, int val)
{
int j;
int r;
for (j = 1; j <= res[i][0]; ++j) {
if (res[i][j] == val) return;
if (res[i][j] > val) break;
}
if (j > res[i][0]) {
res[i][j] = val;
}
else {
for (r = res[i][0]; r >= j; --r) {
res[i][r+1] = res[i][r];
}
res[i][r+1] = val;
}
res[i][0]++;
}
int main()
{
int n;
int r;
int i, j;
res[0][0] = 1; res[0][1] = 0;
res[1][0] = 1; res[1][1] = 0;
for(i = 2; i <= 20; ++i) {
res[i][0] = 1; res[i][1] = 0;
for (r = i-1; r >= 0; --r) {
for (j = 1; j <= res[r][0]; ++j)
add(i, (i-r)*r+res[r][j]);
}
}
while (scanf("%d", &n)!=EOF) {
for (r = n, i = 1; i <= res[r][0]; ++i) {
if (i == res[r][0])
printf("%d\n", res[r][i]);
else
printf("%d ", res[r][i]);
}
}
system("pause");
return 0;
}


浙公网安备 33010602011771号