dfs模拟暴力(ecfinal M题)
时间:2020-01-06
本文章向大家介绍dfs模拟暴力(ecfinal M题),主要包括dfs模拟暴力(ecfinal M题)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
https://codeforces.com/gym/102471/problem/M
题意:给你集合A of {1,2,…,n} , 求子集的最大分数
给出a[1],a[2]...a[n] 和 b[1],b[2]...b[n].
积分规则:
1、初始分数为0.
2、每一个加入集合的i加上a【i】分数
3、集合中任意 (i,j) 满足i≥2, j≥2, i∈A and j∈A, 有 k>1 i的k次方=j, 就减掉b【j】分数。
解法:sqrt(n)个数每个数存在次方关系的下标单拎出来,进行dfs暴力选与不选.
#include <bits/stdc++.h> using namespace std; #define mem(a,b) memset(a,b,sizeof(a)) #define cin(a) scanf("%d",&a) #define pii pair<int,int> #define ll long long #define gcd __gcd const int inf = 0x3f3f3f3f; const int maxn = 100100; const int M = 1e9+7; int n,k; ll a[maxn],b[maxn]; bool vis[maxn]; ll val[maxn],sub[maxn]; bool slt[maxn]; //select ll mx; void dfs(int idx,ll sum) { if(idx == k) { mx = max(mx,sum); return; } slt[idx] = 1; //选 ll temp = sum+val[idx]; for(int i = 1; i < idx; i++) { if(slt[i] && idx%i == 0) temp -= sub[idx]; } dfs(idx+1,temp); slt[idx] = 0; //回溯,不选 dfs(idx+1,sum); } ll solve(int x) { k = 1; for(int i = x; i <= n; i*=x) { vis[i] = 1; val[k] = a[i]; sub[k] = b[i]; k++; } mx = 0; //memset(slt , false , sizeof(slt)); dfs(0,0); return mx; } int main() { /*#ifdef ONLINE_JUDGE #else freopen("data.in", "r", stdin); //freopen("data.out", "w", stdout); #endif*/ scanf("%d",&n); for(int i = 1; i <= n; i++) { scanf("%lld",&a[i]); } for(int i = 1; i <= n; i++) { scanf("%lld",&b[i]); } ll ans = 0; for(int i = 2; i <= sqrt(n); i++) { if(!vis[i])ans += solve(i);//注意不要重复领出来,领一次就可以 } for(int i = 1; i <= n; i++) { if(!vis[i]) ans += a[i]; } printf("%lld\n",ans); return 0; }
原文地址:https://www.cnblogs.com/nonames/p/12156268.html
- 姚期智教授:量子计算是千亿万亿级别的产业,或成为科技创新的引擎
- Powershell中禁止执行脚本解决办法
- 使用AsyncTask异步更新UI界面及原理分析
- 商家为何要做小程序?
- Android中关于dip和px以及转换的总结
- Python介绍
- python案例-用户登录
- 推荐个找代码示例的VS 插件 All-In-One Code Framework Sample Browser
- 明星推出定制AI形象,虚拟形象有何优势
- apache工作模式梳理
- Mysql的二进制日志binlog的模式说明
- Git版本控制器使用总结性梳理
- “黑科技”人脸识别 TA和你的距离不是一般的近
- android之数据存储之SQLite
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux中出现“No space left on device”错误的排查与解决方法
- 浏览器是如何调度进程和线程的?
- Linux shell利用sed如何批量更改文件名详解
- linux下通过xinetd服务管理 rsync 实现开机自启动
- linux实现自动删除最旧的几个文件详解
- 基于Ubuntu 16.04设置固定IP的方法教程
- CentOS添加和删除用户以及用户组的方法
- Linux下使用inode删除指定文件方法示例
- Apache虚拟目录配置及vue-cli反向代理的设置方法
- linux socket通讯获取本地的源端口号的实现方法
- 初识centos7与centos6的区别整理(内核、命令等)
- Apache下通过shell脚本提交网站404死链的方法
- centos查找已安装的jdk路径的方法
- CentOS7+apache+php7+mysql5.7配置教程详解
- 如何利用SystemTap统计函数执行耗时详解