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

    订阅 RSS

    歪酷博客

    0011512

    « 上一篇: UVa 上ac的第50题 ... 庆祝一下 下一篇: 线段树的应用 zju1128 »
    kodder @ 2006-05-20 22:02

    // UVa 574 ac
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    #define MAX 15
     
    int    n, total, flag, data[MAX], cnt[MAX], used[MAX];
     
    void search(int depth, int sum)
    {
           int    i, j, first = 1;
     
           if (depth > n) {
                  if (sum != total) return;
                  for (i = 0; i <= n; i++) {
                         for (j = 0; j < used[i]; j++)
                                if (first) {
                                       printf("%d", data[i]);
                                       first = 0;
                                } else printf("+%d", data[i]);
                  }
                  printf("\n");
                  flag = 0;
                  return;
           }
           for (i = cnt[depth]; i >= 0; i--) {
                  if (sum + i*data[depth] > total) continue;
                  used[depth] = i;
                  search(depth + 1, sum + i*data[depth]);
           }
    }
    int main(void)
    {
           int    i, len;
          
           while (scanf("%d %d", &total, &len) == 2 && len) {
                  scanf("%d", &data[0]);
                  memset(cnt, 0, sizeof(cnt));
                  memset(used, 0, sizeof(used));
                  cnt[n = 0] = 1;
                  for (i = 1; i < len; i++) {
                         scanf("%d", &data[n + 1]);
                         if (data[n + 1] == data[n]) cnt[n]++;
                         else cnt[++n] = 1;
                  }
                  flag = 1;
                  printf("Sums of %d:\n", total);
                  search(0, 0);
                  if (flag) printf("NONE\n");
           }
           return 0;
    }
    // 下面是没有ac的代码, 但是我看不出哪里有错???
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    #define MAX 130
     
    int    n, total, data[MAX], flag[MAX];
    int    mark, alen, ans[MAX], prev[MAX], plen;
     
    void output(void)
    {
           int    i;
     
           if (alen < plen) return;
           if (alen == plen) {
                  for (i = 0; i < alen; i++)
                         if (ans[i] != prev[i])
                                goto out;
                  return;
           }
    out: printf("%d", ans[0]);
           for (i = 1; i < alen; i++) printf("+%d", ans[i]);
           printf("\n");
           mark = 0;
           plen = alen;
           for (i = 0; i < alen; i++) prev[i] = ans[i];
    }
    void dfs(int floor)
    {
           int    i, sum;
     
           if (floor >= n) return;
           flag[floor] = 1;
           for (i = 0, sum = 0, alen = 0; i < n; i++) {
                  if (flag[i]) {
                         sum += data[i];
                         ans[alen++] = data[i];
                  }
           }
           if (sum == total) {
                  output();
                  flag[floor] = 0;
                  dfs(floor + 1);
           } else if (sum > total) {
                  flag[floor] = 0;
                  dfs(floor + 1);
           } else {
                  dfs(floor + 1);
                  flag[floor] = 0;
                  dfs(floor + 1);
           }
    }
    int main(void)
    {
           int    i;
     
           while (scanf("%d %d", &total, &n) && n) {
                  for (i = 0; i < n; i++) scanf("%d", &data[i]);
                  memset(flag, 0, sizeof(flag));
                  plen = 0;
                  mark = 1;
                  printf("Sums of %d:\n", total);
                  dfs(0);
                  if (mark) printf("NONE\n");
           }
           return 0;
    }




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

    已经注册过? 请登录

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

    Email
    网址
    * 评论
    表情
     


     

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

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

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