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;
}

 

posted @ 2009-04-15 09:43  断桥残雪  阅读(160)  评论(0)    收藏  举报