• 网志分类
  • » 查看所有日志 (45)
    » ACM (24)
    » 程序设计语言 (3)
    » 我的软件 (5)
    » 转贴 (12)
    » 被遗忘的角落 (1)
  • 站内搜索
  • 友情链接
  • » 我的歪酷 非非共享界
    » kuye
    » 开复学生网

    订阅 RSS

    歪酷博客

    0011504

    « 上一篇: UVa 10465 Homer Simpson (DP) 下一篇: 最近在做dfs啊, 郁闷啊简单题... »
    kodder @ 2006-05-15 20:43

    /*
    * UVa 10482 Algorithm DP
    * http://online-judge.uva.es/p/v104/10482.html
    * 如果他不是分给三个小孩而是分给k个小孩该怎么做呢????
    * 不知道, 以我现在的思路就是用k-1dim数组, 那也太Brute了, 这个问题值得思考啊...
    * 努力AC吧, 虽然累,但是值得,总比去追追不到的要实在,虽然累总比痛苦好.
    */
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <limits.h>
     
    #define MAX 33
    #define TMAX 650
     
    struct node {
           int flag;
           int mark[MAX];
           int f[TMAX];
    };
    struct node Thrf[TMAX];
    int candy[MAX];
     
    int maxl(int a, int b, int c)
    {
           int t = a > b ? a : b;
           t = t > c ? t : c;
           return t;
    }
    int minl(int a, int b, int c)
    {
           int t = a < b ? a : b;
           t = t < c ? t : c;
           return t;
    }
    int cmp(const void *a, const void *b)
    {
           const int *s1 = (const int *)a;
           const int *s2 = (const int *)b;
          
           if (*s1 > *s2) return 1;
           return -1;
    }
    int main(void)
    {
           int i, j, k, l, n, t, tmp, cas, total, min;
          
           scanf("%d", &t);
           for (cas = 1; cas <= t; cas++) {
                  scanf("%d", &n);
                  for (i = 1, total = 0; i <= n; i++) {
                         scanf("%d", &candy[i]);
                         total += candy[i];
                  }
                  qsort(candy + 1, n, sizeof(int), cmp);
                  // initialize...
                  for (i = 0; i <= total; i++) {
                         Thrf[i].flag = 0;
                         memset(Thrf[i].mark, 0, sizeof(Thrf[i].mark));
                         memset(Thrf[i].f, 0, sizeof(Thrf[i].f));
                  }
                  Thrf[0].flag = 1;
                  k = 0;
                  for (i = 1; i <= n; i++) {
                         // 将第i种糖加进来的时候。
                         for (j = k; j >= 0; j--) {// && Thrf[j + candy[i]].flag == 0
                                if (Thrf[j].flag) {
                                       Thrf[j + candy[i]].flag = 1;
                                       for (l = 1; l <= n; l++) Thrf[j + candy[i]].mark[l] = Thrf[j].mark[l];
                                       Thrf[j + candy[i]].mark[i] = 1;
                                }
                         }
                         k += candy[i];
                  }
                  for (l = 0; l <= total; l++) {
                         if (Thrf[l].flag == 0) continue;
                         Thrf[l].f[0] = 1;
                         k = 0;
                         for (i = 1; i <= n; i++) {
                                if (Thrf[l].mark[i]) continue;
                                // 将第i类糖果加到里面去。
                                for (j = k; j >= 0; j--) {
                                       if (Thrf[l].f[j]) Thrf[l].f[j + candy[i]] = 1;
                                }
                                k += candy[i];
                         }
                  }
                  min = INT_MAX;  
                  for (i = 0; i <= total; i++) {
                         if (Thrf[i].flag) {
                                for (j = 0; j <= total - i; j++) {
                                       if (Thrf[i].f[j]) {
                                              tmp = maxl(i, j, total - i - j) - minl(i, j, total - i - j);
                                              if (min > tmp) min = tmp;
                                       }
                                }
                         }
                  }
                  printf("Case %d: %d\n", cas, min);
           }
           return 0;
    }
     




    评论 / 个人网页 / 扔小纸条
    * 昵称

    已经注册过? 请登录

    新用户请先注册 以便能显示头像及追踪评论回复

    Email
    网址
    * 评论
    表情
     


     

    分类小组论坛
    杂谈 , 娱乐、八卦 , 文学、艺术 , 体育 , 旅游、同城 , 象牙塔 , 情感 , 时尚、生活 , 星座 , 科技

    请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

    相关法律法规
    全国人大常委会关于维护互联网安全的决定
    中华人民共和国计算机信息系统安全保护条例
    中华人民共和国计算机信息网络国际联网管理暂行规定
    计算机信息网络国际联网安全保护管理办法
    计算机信息系统国际联网保密管理规定