题解 | #称砝码#

称砝码

http://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c

#include <stdio.h>
#include <string.h>
//遍历添加砝码,一种类似桶排序的思想
int main()
{
  //暴力遍历
  int n;
  while (scanf("%d", &n) != EOF)
  {
    int weight_base[15] = {0};
    int limit[15] = {0};

    for (int i = 0; i < n; i++)
      scanf("%d", &weight_base[i]);
    for (int i = 0; i < n; i++)
      scanf("%d", &limit[i]);

    int total = 0;
    for (int i = 0; i < n; i++)
    {
      total += weight_base[i] * limit[i];
    }
    int weight_exist[total + 1] ;
      for(int i=0;i<total+1;i++)
          weight_exist[i]=0;
      
      
      
    weight_exist[0] = 1;
    //遍历添加每一个砝码,从后向前,从当前获得过得最大值开始
    for (int i = 0; i < n; i++)
    {
      for (int j = 0; j < limit[i]; j++)
      {
        for (int k = total; k >= 0; k--)//从前向后会前面影响后面的操作如 1 2 3 4  1+2=3  会使3+2 = 5这样连加两个砝码
        {
          if (weight_exist[k] == 1)
            weight_exist[k + weight_base[i]] = 1;
        }
      }
    }
int kind = 0;
    for(int i=0;i<total+1;i++){
kind += weight_exist[i];
    }

    printf("%d\n",kind);
  }


  return 0;
}

全部评论
实话说这段代码写的并不好 不知道这里一堆人在这大佬啥 这已经是这题最差的解法了
3 回复 分享
发布于 2023-03-20 11:15 广东
大佬,你好牛啊,可以加个微信吗
点赞 回复 分享
发布于 2022-03-01 22:06
啊这,好暴力
点赞 回复 分享
发布于 2022-05-26 17:49
思路和大佬一样,想了好一会儿没想明白怎么遍历出整个重量,也就是第三层循环。大佬牛啊
点赞 回复 分享
发布于 2022-12-15 21:31 四川
点赞 回复 分享
发布于 2023-01-05 18:18 湖北
确实 当时的想法还是多循环了 应该先循环重量 再循环数量 for (int k = total; k >= 0; k--)//从前向后会前面影响后面的操作如 1 2 3 4 1+2=3 会使3+2 = 5这样连加两个砝码 { if (weight_exist[k] == 1) { for (int j = 1; j < limit[i]; j++) { weight_exist[k + weight_base[i]*j] = 1; } } } 不过我用python 这样循环的时候超时了 python还是只能用set容器
点赞 回复 分享
发布于 03-10 16:45 江苏

相关推荐

11-15 18:39
已编辑
西安交通大学 Java
全村最靓的仔仔:卧槽,佬啥bg呢,本也是西交么
点赞 评论 收藏
分享
11 6 评论
分享
牛客网
牛客企业服务