xiao方法

#include<stdio.h>
#include<vector>
#include<iostream> using namespace std; int main()
{
int data[] = {,,};
int flag1 = 0xffffff, flag2 = 0xffffff;
int sum = ;
int res = ;
for(int i = ; i < ; i++)
{
sum += data[i];
if(data[i]%== && data[i]<flag1)
{
flag1 = data[i];
}
else if(data[i]%== && data[i]<flag2)
{
flag2 = data[i];
}
if(sum%== && sum>res)
{
res = sum;
}
else if(sum%== && flag1<0xffffff)
{
res = sum-flag1>res?sum-flag1:res;
}
else if(sum%== && flag2<0xffffff)
{
res = sum-flag2>res?sum-flag2:res;
}
}
cout<<res<<endl;
return ;
} int divide_3(vector<int> input,int length){
vector<int> dp(length);
for(int i = ;i < length;i++){ } }

正负都能解决

#include <cstdio>
#include <algorithm>
#include <iostream>
#include <vector> using namespace std;
int main()
{
int input[] = {-,,,};
vector<int> data(input,input+);
int n = data.size();
vector<vector<int> > dp(n+,vector<int>(,-));
dp[][] = ; for(int i = ;i <= n;i++){
for(int j = ;j < ;j++){
dp[i][j] = max(dp[i][j],dp[i-][j]);
if(dp[i-][j] < )
continue;
int temp = (data[i-] + j) % ;
dp[i][temp] = max(dp[i-][temp], dp[i-][j] + data[i-]);
}
}
cout << dp[n][] << endl;
return ;
}

第一题用DFS是肯定可以做的,但我当时想的是先排个序,然后greedy地取集合里的所有数,看看除3余几

1) 如果余0直接return
2) 如果余1,考虑是丢掉一个最小的除3余1的数,还是丢掉两个最小的除3余2的数.留学论坛-一亩-三分地
3) 如果余2也是类似的
后来跟面试官讨论发现其实不用排序。。打个擂台就能找了(但其实我是想着排序了代码好写一点orz)
优化后时间复杂度是O(n),本来还担心这个方法会不会有点野鸡,但是讲道理效率确实比DFS好得多。。。
follow up: 加入负数的话也是类似的,一开始greedy地取所有正数,然后再考虑是丢掉最小的正数还是加入最大的负数,复杂度一样

divide_3的更多相关文章

  1. 【java提高】(19)---BigDecimal详解和精度问题

    BigDecimal详解和精度问题 一.背景 在实际开发中,对于 不需要任何准确计算精度的属性可以直接使用float或double,但是如果需要精确计算结果,则必须使用BigDecimal,例如价格. ...

随机推荐

  1. M斐波那契数列(矩阵快速幂+费马小定理)

    M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Sub ...

  2. php+layui实现图片上传与预览

    端代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <titl ...

  3. DNS协议详解

    DNS协议详解 简介 DNS(Domain Name System)域名系统,主要实现的功能是将域名转换成ip地址的一个服务.它是由一个分层的DNS服务器实现的分布式数据库,同时.他也是一个使得主机能 ...

  4. 火狐hr标签的兼容性问题

    想在盒子里加一条白色横线 加了以下代码 页面效果如下<hr style="width:80%;height:1px;border:none;border-top:1px solid # ...

  5. 图像阈值化-threshold、adaptivethreshold

    在图像处理中阈值化操作,从一副图像中利用阈值分割出我们需要的物体部分(当然这里的物体可以是一部分或者整体).这样的图像分割方法是基于图像中物体与背景之间的灰度差异,而且此分割属于像素级的分割.open ...

  6. Android GetMethodID 函数的说明

    GetFieldID是得到java类中的参数ID,GetMethodID得到java类中方法的ID,它们只能调用类中声明为 public的参数或方法.使用如下: jfieldID topicField ...

  7. 解决跨域问题之anywhere

    anywhere搭建服务,ionic PC端和手机端可以通过网址来查看网页效果.解决跨域问题 大家都知道编写完HTML代码后,可以直接在pc端的浏览器查看,但现在手机端越来越广泛了,想跟在pc端查看网 ...

  8. 关于通过ServletContext获取数据出现的http500的错误的解决方案

    1.问题的简述 我创建了一个两个servlet以及一个jsp页面,假定给两个servlet分别命名(初始化数据servlet)和(数据处理servlet),jsp页面用于传递数据至数据处理servle ...

  9. Git执行过程中出现问题及解决方法

    not-fast-forward https://help.github.com/articles/dealing-with-non-fast-forward-errors/

  10. Ubuntu 18.04 Server 设置静态IP

    一.背景 Netplan是Ubuntu 17.10中引入的一种新的命令行网络配置实用程序,用于在Ubuntu系统中轻松管理和配置网络设置.它允许您使用YAML抽象来配置网络接口.它可与NetworkM ...