DFS问题举例:N个整数选k个使其和为x
N个整数选k个使其和为x,若有多个方案,选择元素平方和最大的一个
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<string>
#include<stack>
#include<queue>
#include<map>
#define MAX 100010 using namespace std;
int n,k,x,maxSumSq=-,A[MAX];
//temp存放临时方案,ans存放平方和最大的方案
vector<int> temp,ans;
//当前处理index号整数,当前已选整数个数nowK
//当前已选整数和sum,当前已选整数平方和sumSq
void DFS(int index,int nowK,int sum,int sumSq){
if(nowK==k && sum==x){
if(sumSq>maxSumSq){
maxSumSq=sumSq;
ans=temp;
}
return;
}
if(index==n || nowK>k ||sum>x) return;
temp.push_back(A[index]);
//选index号数
DFS(index+,nowK+,sum+A[index],sumSq+A[index]*A[index]);
temp.pop_back();
//不选index号数
DFS(index+,nowK,sum,sumSq);
}
int main(){
scanf("%d%d%d",&n,&k,&x);
for(int i=;i<n;i++)
scanf("%d",&A[i]); DFS(,,,);
for(int i=;i<k;i++)
printf("%d ",ans[i]);
return ;
}
若是改为:
N个数中选k个,且每个可选多次,只需改为
DFS(index,nowK+1,sum+A[index],sumSq+A[index]*A[index]);
DFS问题举例:N个整数选k个使其和为x的更多相关文章
- 组合数学or not ---- n选k有重
模板问题: 1. 取物品 (comb.pas/c/cpp) [问题描述] 现在有n个物品(有可能相同),请您编程计算从中取k个有多少种不同的取法.[输入] 输入文件有两行,第一行包含两个整数n,k(2 ...
- 用递归法计算从n个人中选选k个人组成一个委员会的不同组合数
用递归法计算从n个人中选选k个人组成一个委员会的不同组合数. 分析 由n个人里选k个人的组合数= 由n-1个人里选k个人的组合数+由n-1个人里选k-1个人的组合数: 当n = k或k = 0时,组合 ...
- hdu 1561 树形背包 选k个最大价值
http://blog.csdn.net/dellaserss/article/details/8799730 这题其实和上一题思路是一样的,一个0节点作为根节点,通过剩余量来遍历子树. #inclu ...
- hdu6003 Problem Buyer 贪心 给定n个区间,以及m个数,求从n个区间中任意选k个区间,满足m个数都能在k个区间中找到一个包含它的区间,如果一个区间包含了x,那么 该区间不能再去包含另一个数,即k>=m。求最小的k。如果不存在这样的k,输出“IMPOSSIBLE!”。
/** 题目:hdu6003 Problem Buyer 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6003 题意:给定n个区间,以及m个数,求从n个区 ...
- hdu4106 区间k覆盖问题(连续m个数,最多选k个数) 最小费用最大流 建图巧妙
/** 题目:hdu4106 区间k覆盖问题(连续m个数,最多选k个数) 最小费用最大流 建图巧妙 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4106 ...
- 给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除。
题目描述: 给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除. 输入: 两个整数n(2<=n<=1000),a(2<=a<=1000) 输出: 一个整数. ...
- vijos 1128 N个数选K个数 (DFS )
从 n 个整数中任选 k 个整数相加,可分别得到一系列的和 要求你计算出和为素数共有多少种 IN4 33 7 12 19 OUT1 # include <iostream> # inclu ...
- HDOJ 2561. 第二小整数 第k大问题
第二小整数 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- 解救小哈——DFS算法举例
一.问题引入 有一天,小哈一个人去玩迷宫.但是方向感不好的小哈很快就迷路了.小哼得知后便去解救无助的小哈.此时的小哼已经弄清楚了迷宫的地图,现在小哼要以最快的速度去解救小哈.那么,问题来了... 二. ...
随机推荐
- 洛谷 P1742 最小圆覆盖 (随机增量)
题目链接:P1742 最小圆覆盖 题意 给出 N 个点,求最小的包含所有点的圆. 思路 随机增量 最小圆覆盖一般有两种做法:随机增量和模拟退火.随机增量的精确度更高,这里介绍随机增量的做法. 先将所有 ...
- upc组队赛4 Go Latin
Go Latin 题目描述 There are English words that you want to translate them into pseudo-Latin. To change a ...
- shell 读取配置文件的用法
https://blog.csdn.net/qq_36684665/article/details/81134179 亲测有用!
- Java实验报告(三)&第五周课程总结
班级 计科二班 学号 20188425 姓名 IM 完成时间2019/9/27 评分等级 实验三 String类的应用 实验目的 掌握类String类的使用: 学会使用JDK帮助文档: 实验内容 1. ...
- jmeter Thread Groups的顺序执行与并行执行
本期目标: 理解Thread Groups的顺序执行与并行执行 控制因子:Run Thread Groups consecutively(i.e.one at time) 预期结论: 1.勾选 Run ...
- 41-python基础-python3-字符串-转义字符
转义字符包含一个倒斜杠(\),紧跟着是想要添加到字符串中的字符.(尽管它包含两个字符,但大家公认它是一个转义字符.) 实例1: Python 知道,因为 Bob\'s 中的单引号有一个倒斜杠,所以它不 ...
- centos6系列更换阿里yum源
1.首先备份原来的cent os官方yum源 cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 2. ...
- Ubuntu16.04+cuda9.0安装教程
1.安装NVIDIA驱动 首先去官网(http://www.nvidia.cn/Download/index.aspx?lang=cn)查找适配自己电脑GPU的驱动,我的电脑驱动版本如下: 执行如下语 ...
- Spring Boot中普通类获取Spring容器中的Bean
我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器进行管理,但是在实际当中,我们往往会碰到在一个普通的Java类中,自己动手n ...
- kernel: possible SYN flooding on port 80. Sending cookies
1. sysctl -w net.ipv4.tcp_syncookies=1 #启用使用syncookiessysctl -w net.ipv4.tcp_synack_retries=1 #降低syn ...