14天阅读挑战赛

目录

排序+dfs+简单剪枝

贪心+模拟


排序+dfs+简单剪枝

幸运的袋子_牛客题霸_牛客网

思路:

对于任意两个正整数 a,b 如果满足 a+b>a b ,则必有 一个数为 1. 可用数论证明:设 a=1+x,b=1+y ,则 1+x+1+y>(1+x) (1+y) , ---> 1>x y ,则 xy 必有一个为 0 ,即 a,b 有一个为 1.
  1. 将球按标号升序排序。每次从小到大选择,当选择到a1,a2,...,ak-1时满足给定条件,而再增加选择ak时不满足条件(ak必然大于等于max(a1,a2,...,ak-1)),继续向后选择更大的数,必然无法满足!此时不必再继续向后搜索。
  2. 如果有多个1,即当k=1时,sum(1)>pi(1)不满足,但下一个元素仍为1,则可以满足1+1>1*1, 所以要判断当前ak是否等于1,如果等于1,虽然不能满足,组合的个数不能增加,但是继续向后搜索,仍然有满足条件的可能.
  3. 对于重复数字,组合只能算一个,要去重
#include <iostream>
#include<algorithm>
using namespace std;
int x[1010];//所有球
int n;      //总数
int ans;    //幸运袋子数
int sum,mul;void dfs(int pos) //pos当前搜索的位置
{for(int i=pos;i<n;i++)//循环,搜索以位置i开始所有可能的组合{sum+=x[i];mul*=x[i];if(sum>mul){ans++;dfs(i+1);}//k=1时,sum(1)>pi(1)不满足,但下一个元素仍为1,则可以满足1+1>1*1else if(x[i]==1) dfs(i+1); else {sum-=x[i];  mul/=x[i];break;}//要搜索下一个位置之前,首先恢复sum和multi(回溯)sum-=x[i];mul/=x[i];//数字相同的球,没有什么区别,都只能算一个组合,所以直接跳过while(i<n-1&&x[i]==x[i+1]) i++;}
}int main() {while(cin>>n){mul=1;for(int i=0;i<n;i++) cin>>x[i];sort(x,x+n);dfs(0);cout<<ans<<endl;}return 0;}

贪心+模拟

思路: (别被题目解释误导了!)

要想能够让左右手套至少有一副配对,我们可以先把左手手套每种都至少拿一只,然后再随便拿一只右手手套就可以成功配对 ,左手套每种拿一只同理。

  1. 对于非0递增序列a1,a2...an,要想最终取值覆盖每一个种类 n = sum(a1...an) - a1 + 1(也就是总数减去最小值之后加一
  2. 最小数量leftsum = 左边数量和 - 左边最小值 + 1
  3. rightsum = 右边数量和 - 右边的最小值 + 1
  4. 而对于有0存在的,则需要做累加, 保证覆盖每一种颜色
class Gloves {
public:int findMinimum(int n, vector<int> left, vector<int> right) {int leftsum=0,lmin=INT_MAX;int rightsum=0,rmin=INT_MAX;int sum=0;for(int i=0;i<n;i++){if(left[i]*right[i]==0) sum+=left[i]+right[i];//对于有0,则不可能配对,累加保底else    //找到最小值和总和{leftsum+=left[i];rightsum+=right[i];lmin=min(lmin,left[i]);//更新左右手套的最小数量rmin=min(rmin,right[i]);}}//对左右手套覆盖所以颜色的拿法取min+0存在保底数+加一表示顺便拿一个手套即可配对return sum+min(leftsum-lmin+1,rightsum-rmin+1)+1;}
};

牛客竞赛每日俩题 - Day1相关推荐

  1. 牛客竞赛每日俩题 - Day12

    目录 set的插入删除 vector<string>的应用 set的插入删除 数据库连接池__牛客网 [解题思路] 循环接收每组用例,对于每组用例进行如下操作: 1. 依次获取每个状态,如 ...

  2. 牛客竞赛每日俩题 - Day7

    目录 经典01背包问题 二叉树遍历与构造(考研重点) 经典01背包问题 求正数数组的最小不可组成和_百度笔试题_牛客网 参考大佬题解: 动态规划:01背包问题(无物品价值),思想相同,题目最终要求有些 ...

  3. 牛客竞赛每日俩题 - Day9

    目录 日期推算 分解因数 日期推算 美国节日__牛客网 思路: 首先,我们要想找到一个月第N个星期W,一定需要一个参照物,最好的目标当然是这个月的第一天.拿到参照物后,我要能得 到参照物的星期数,然后 ...

  4. 牛客竞赛每日俩题 - Day3

    14天阅读挑战赛 目录 动态规划思想 经典DP 简单的数学问题 动态规划思想 查找两个字符串a,b中的最长公共子串_牛客题霸_牛客网 思路:         本题需要用动态规划求解,MCS[i][j] ...

  5. 牛客竞赛每日俩题 - 动态规划3

    目录 类01背包问题,选or不选 变种走方格 类01背包问题,选or不选 不同的子序列_牛客题霸_牛客网 问题翻译: S有多少个不同的子串与T相同 S[1:m]中的子串与T[1:n]相同的个数 由S的 ...

  6. 牛客竞赛每日俩题 - Day2

    14天阅读挑战赛 目录 字符串函数的熟练使用(模拟) 双指针+模拟+回溯 字符串函数的熟练使用(模拟) 扑克牌大小_牛客题霸_牛客网 别看题目很长,其实就是简单的斗地主,比较两手牌哪边大而已: 思路: ...

  7. 牛客竞赛每日俩题 - Day5

    目录 DP+贪心 dfs迷宫问题(最短路径) DP+贪心 年终奖_牛客题霸_牛客网 思路: 定义f(i,j)表示从左上角走到坐标(i,j)处能获得的最大奖励. 搜索所有从左上角走到右下角的路径,找到最 ...

  8. 牛客竞赛每日俩题 - 动态规划2

    目录 经典DP - 走方格 走方格2.0 分割回文串 分割回文串 - 回文优化 经典DP - 走方格 不同路径的数目(一)_牛客题霸_牛客网 状态:         子状态:从(0,0) 到达 (1, ...

  9. 牛客竞赛每日俩题 - 动态规划1

    目录 DP入门(存储之前状态以简化) DP解决最短路问题 DP入门(存储之前状态以简化) 拆分词句_牛客题霸_牛客网 思路: 方法:动态规划 状态:         子状态:前1 , 2 , 3 , ...

最新文章

  1. 从特斯拉到英伟达,那些端到端自动驾驶研发系统有何不同?
  2. fail safe java_Java中快速失败(fail-fast)和安全失败(fail-safe)的区别?
  3. Cisco配置单臂路由及静态路由
  4. docker安装ubuntu镜像
  5. 集成方法Ensemble Method(bagging, AdaBoost)
  6. anaconda利用sns或plt画图中文乱码问题
  7. linux 运行有道词典,Linux有道词典软件安装
  8. Juniper SRX340防火墙配置
  9. 【吐血整理-历时两个月,长达万字】FDTD Solutions学习笔记
  10. python模拟登录12306_利用Python与selenium自动化模拟登陆12306官网!
  11. python微信机器人之小i
  12. h5课件制作_H5课件——H5页面在教学上的妙用
  13. 登录onedrive显示无法连接服务器,Win10专业版系统下OneDrive无法登录提示连接到OneDrive时出现问题怎么办...
  14. Maya XGen 毛发制作2 - 创建Guides Splines
  15. 微分方程数值解法(实际应用)
  16. 2014校园招聘总结(转载)
  17. 相机光学(十九)——像差理论(球差)
  18. Odoo14免费开源ERP实施指南:CRM功能应用篇(2)
  19. CTF实践 靶机渗透
  20. 2022低压电工试题及在线模拟考试

热门文章

  1. direct9.0b 下载地址
  2. bzoj1143[CTSC2008]祭祀river
  3. php制作万年历的步骤_制作一个php万年历
  4. 谷歌2013年搜索热榜 全球榜曼德拉抢榜首 中国区小爸爸第一
  5. java Supplier接口与示例
  6. 在linux中查找运行程序句柄,Linux下查看句柄
  7. HTTP代理,代理服务器
  8. 毫米波通信与MIMO 之间的关系
  9. Flowable(1) docker-compose安装flowable-ui
  10. 最好的HTML 5编码教程和参考手册分享