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. 【Java基础】6、java中使用switch-case的用法及注意事项超全总结

    1.switch-case注意事项: switch(A),括号中A的取值只能是整型或者可以转换为整型的数值类型,比如byte.short.int.char.还有枚举:需要强调的是:long和Strin ...

  2. XJad反编译工具

    XJad反编译工具 我们写的java文件,编译后就会生成相应的字节码文件,也就是.java文件经过编译以后生成.class文件 现在,假设我们现在存在这样一个问题:就是我们想自己动手验证注释会不会被编 ...

  3. hadoop_批量命令脚本&同步文件脚本

    1.xcall.sh 批量命令脚本,例:xcall.sh jps ,查看hadoop101~ hadoop104的jps进程 注意:在执行命令的时候,若是提示没有这个命令,但是在本机又可以执行,记得在 ...

  4. js飘窗

    广告页上总会出现飘窗效果: adver_pos_id = getOtherParameter("id"); adver_Sid = getOtherParameter(" ...

  5. 锋利的Jquery之插件Cookie记住密码

    先下载Jquery cookie js ,下载路径: http://plugins.jquery.com/cookie/ 记住,jquery的包要放在cookie的包前面,否则会产生异常 <!D ...

  6. event.stopPropagation与event.preventDefault的区别

    1.event.stopPropagation 停止事件的传播,阻止它被分配到其它Dom节点.但是不能阻止同一Dom节点上的其它事件句柄被调用. 注:不同Dom节点的事件必须是一致的.如父节点和子节点 ...

  7. bower 和 npm 的区别详细介绍

    摘要: 本文讲的是bower 和 npm 的区别详细介绍, 简单的说,npm是进行后端开发中,使用的模块安装工具,而bower,是前端的模块安装工具. 比如,在安装express,socket.io时 ...

  8. linux根目录下的文件夹及文件

    bin->放置执行文件的目录,但毕竟特殊,其下放置的是在单用户维护模式下还能被操作的命令.主要有cat.chmod.date. mv.mkdir.cp.bash等常用命令.dev->存放设 ...

  9. windows与虚拟机的linux共享一个文件夹

    1.安装VMware Tools,在VMware面板上选择“虚拟机-重新安装VMware tools…” 2.使用命令 Ctrl+Alt+T 打开终端: 3.切换用户到root,命令 su 回车,输入 ...

  10. 自定义UDF

    1.编写udf类 package hive.udf; import org.apache.hadoop.hive.ql.exec.Description; import org.apache.hado ...