[USACO]Shaping Regions

题意:给你一个矩形网格,他的初始网格颜色为1,现在用颜色来覆盖里面的小矩形。问你最后能看到什么颜色且这种颜色的面积有多大。

解题思路:每一次增加一个矩形进来都要判断它和以前的矩形有没有交集,如果有交集则把原先的矩形分为几块。

解题代码:

 1 // File Name: kimbits.c
 2 // Author: darkdream
 3 // Created Time: 2014年02月28日 星期五 19时02分25秒
 4 /*
 5 ID: dream.y1
 6 PROG: kimbits
 7 LANG: C++
 8 */
 9 #include<stdio.h>
10 #include<string.h>
11 #include<stdlib.h>
12 #include<time.h>
13 #include<math.h>
14 int hs[40];
15 int map[33][33];
16 void init()
17 {
18     memset(map,0,sizeof(map));
19     map[0][0] =1 ; 
20     for(int i = 1;i <= 31 ;i ++)
21     {
22       map[i][0] = 1; 
23       map[i][i] = 1; 
24     }
25     for(int i = 2;i <= 31;i ++)
26         for(int j = 1;j < i ;j ++)
27         {
28           map[i][j] = map[i-1][j] + map[i-1][j-1];
29         }
30 }
31 void solve(long long n , long long m , long long k )
32 {
33     long long sum[40];
34     memset(sum,0,sizeof(sum));
35     for(int i = 0;i <= n;i ++)
36     {
37        sum[i] = 0; 
38        for(int  j = 0;j <= m;j ++)
39        {
40          sum[i] += map[i][j];
41        }
42        if(sum[i] >= k )
43        {
44 
45            hs[i] = 1;
46            if(i == 1)
47                return ;
48            solve(i-1,m-1,k-sum[i-1]);
49            break;
50        }
51     }
52 }
53 int main(){
54    freopen("kimbits.in","r",stdin);
55    freopen("kimbits.out","w",stdout);
56     long long n , m , k ; 
57    scanf("%lld %lld %lld",&n ,&m,&k);
58    init();
59    solve(n,m,k);
60    for(int i = n ;i >= 1;i --)
61        if(hs[i])
62            printf("1");
63        else printf("0");
64    printf("
");
65    return 0 ;
66 }
View Code
没有梦想,何谈远方
原文地址:https://www.cnblogs.com/zyue/p/3580974.html