• codevs1669(dfs)子集和目标值


    1692 子集和的目标值

     

     时间限制: 1 s
     空间限制: 128000 KB
     题目等级 : 钻石 Diamond
     
    题目描述 Description

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

    输入描述 Input Description

    第一行为整数n T

    n为整数个数,T为目标值

    第二行为n个整数in

    输出描述 Output Description

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

    样例输入 Sample Input

    5 9

    1 1 1 4 17

    样例输出 Sample Output

    2

    数据范围及提示 Data Size & Hint

    1<=n<=101

    0<=T<=2147483647

    0<=in<=2147484647

    放心,n很大的时候数据都很弱……

    /*尽管这个题的标签是背包dp
    但我一看数据范围这么大,还要加毛线特盘啊之类的,麻烦不会写,就果断搜了。
    简单的dfs就好,不会T。
    */ 
    
    #include<cstdio>
    #include<cmath>
    #include<iostream>
    #include<map>
    #include<algorithm>
    
    using namespace std;
    int n,T,num[105],ans=2147483647;
    map<int,bool>f[105];
    
    void dfs(int x,int tot)
    {  if(x==n+1)ans=min(ans,abs(T-tot));
       else
       {
           if(f[x][tot]||tot-T>ans)return;
           f[x][tot]=true;ans=min(ans,abs(T-tot));
           dfs(x+1,tot);dfs(x+1,tot+num[x]);
       }
    }
    
    int main()
    {
       scanf("%d%d",&n,&T);
       for(int i=1;i<=n;i++)
              scanf("%d",&num[i]);
      dfs(1,0);printf("%d",ans);
       return 0;
    }
    心若向阳,无谓悲伤
    折花枝,恨花枝,准拟花开人共卮,开时人去时。 怕相思,已相思,轮到相思没处辞,眉间露一丝。
  • 相关阅读:
    用户调查报告
    beta-2阶段组员贡献分分配
    beta阶段140字评论
    11月9号站立会议
    BETA预发布演示视频
    第八周PSP&进度条
    11月8号站立会议
    栈——C语言模拟
    读《弗洛伊德:作家与白日梦》
    《爱的艺术》爱的误解——对象,状态
  • 原文地址:https://www.cnblogs.com/L-Memory/p/6131722.html
Copyright © 2020-2023  润新知