zoukankan      html  css  js  c++  java
  • 子集和的目标值

    【题目描述】

    给定n个整数和目标值T,求某一非空子集使子集的元素的和与目标值之差的绝对值最小,元素可重复。

    【输入描述】

    第一行为整数n、T。n为整数个数,T为目标值;

    第二行为n个整数ai。

    【输出描述】

    一个整数,为差的最小值的绝对值。

    【样例输入】

    5 9

    1 1 1 4 17

    【样例输出】

    2

    【数据范围及提示】

    1 <= n <= 101,0 <= ai,T <= 2147484647。

    源代码:
    
    #include<cstdio>
    #include<algorithm>
    #include<map>
    using namespace std;
    map <int,bool> f[102];
    int n,T,ans,i[102];
    bool Flag(0);
    void DP(int t,int sum)
    {
        if (t==n+1)
        {
            ans=min(ans,abs(sum-T));
            return;
        }
        if (sum-T>=ans)
          return;
        if (f[t][sum])
          return;
        f[t][sum]=true;
        ans=min(ans,abs(sum-T));
        DP(t+1,sum);
        DP(t+1,sum+i[t]);
    }
    int main()
    {
        scanf("%d%d",&n,&T);
        for (int a=1;a<=n;a++)
          scanf("%d",&i[a]);
        ans=2147483647;
        DP(1,0);
        for (int a=1;a<=n;a++)
          if (!i[a])
          {
            Flag=true;
            break;
          }
        if (!T&&!ans)
          printf("%d",!Flag);
        else
          printf("%d",ans);
        return 0;
    }
  • 相关阅读:
    .NET 环境中使用RabbitMQ
    WPF窗口模板——Style样式
    C#获取当前日期时间
    C#解析JSON字符串总结
    c#简单加密和对称加密
    List<T>转换为二维数组
    java后台导出pdf
    C# 创建 读取 更新 XML文件
    python 第三天
    编写登录接口
  • 原文地址:https://www.cnblogs.com/Ackermann/p/5780145.html
Copyright © 2011-2022 走看看