time limit per test : 1 second

memory limit per test : 256 megabytes

input : standard input

output : standard output

Polycarpus has a ribbon, its length is nnn. He wants to cut the ribbon in a way that fulfils the following two conditions:

  • After the cutting each ribbon piece should have length aaa, bbb or ccc.
  • After the cutting the number of ribbon pieces should be maximum.

Help Polycarpus and find the number of ribbon pieces after the required cutting.

Input

The first line contains four space-separated integers nnn, aaa, bbb and ccc (1 ≤ n, a,b, c≤ 4000)(1 ≤ n, a,b, c≤ 4000)(1 ≤ n, a,b, c≤ 4000) — the length of the original ribbon and the acceptable lengths of the ribbon pieces after the cutting, correspondingly. The numbers aaa, bbb and ccc can coincide.

Output

Print a single number — the maximum possible number of ribbon pieces. It is guaranteed that at least one correct ribbon cutting exists.

Examples

input

5 5 3 2

output

2

input

7 5 5 2

output

2

Note

In the first example Polycarpus can cut the ribbon in such way: the first piece has length 222, the second piece has length 333.

In the second example Polycarpus can cut the ribbon in such way: the first piece has length 555, the second piece has length 222.

Solve

完全背包,看成给出三种商品,恰好能够装满背包的情况

注意初始化的问题,如果把dpdpdp数组全部初始化为−1-1−1的话,需要注意dp[j]=−1&&dp[j−a[i]]=−1dp[j]=-1\&\&dp[j-a[i]]=-1dp[j]=−1&&dp[j−a[i]]=−1的情况。或者就全部初始值给成小于−1-1−1的数

Code

/*************************************************************************

	 > Author: WZY
> School: HPU
> Created Time: 2019-04-01 18:30:38 ************************************************************************/
#include <cmath>
#include <cstdio>
#include <time.h>
#include <cstring>
#include <limits.h>
#include <iostream>
#include <algorithm>
#include <random>
#include <iomanip>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <vector>
#include <string>
#include <random>
#define ll long long
#define ull unsigned long long
#define lson o<<1
#define rson o<<1|1
#define ms(a,b) memset(a,b,sizeof(a))
#define SE(N) setprecision(N)
#define PSE(N) fixed<<setprecision(N)
#define bug cerr<<"-------------"<<endl
#define debug(...) cerr<<"["<<#__VA_ARGS__":"<<(__VA_ARGS__)<<"]"<<"\n"
#define LEN(A) strlen(A)
const double E=exp(1);
const double eps=1e-9;
const double pi=acos(-1.0);
const int mod=1e9+7;
const int maxn=1e6+10;
const int maxm=1e3+10;
const int moha=19260817;
const int inf=1<<30;
const ll INF=1LL<<60;
using namespace std;
inline void Debug(){cerr<<'\n';}
inline void MIN(int &x,int y) {if(y<x) x=y;}
inline void MAX(int &x,int y) {if(y>x) x=y;}
inline void MIN(ll &x,ll y) {if(y<x) x=y;}
inline void MAX(ll &x,ll y) {if(y>x) x=y;}
template<class FIRST, class... REST>void Debug(FIRST arg, REST... rest){
cerr<<arg<<"";Debug(rest...);}
int dp[maxn];
int main(int argc, char const *argv[])
{
ios::sync_with_stdio(false);cin.tie(0);
cout.precision(20);
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
srand((unsigned int)time(NULL));
#endif
int n;
int a[4];
cin>>n>>a[0]>>a[1]>>a[2];
ms(dp,-1);
dp[0]=0;
for(int i=0;i<3;i++)
for(int j=a[i];j<=n;j++)
if(dp[j-a[i]]!=-1)
MAX(dp[j],dp[j-a[i]]+1);
cout<<dp[n]<<endl;
#ifndef ONLINE_JUDGE
cerr<<"Time elapsed: "<<1.0*clock()/CLOCKS_PER_SEC<<" s.\n";
#endif
return 0;
}

最新文章

  1. [题解+总结]NOIP2010-2015后四题汇总
  2. c#中方法的重载
  3. Fiddler基本原理与抓取Andriod与IOS的App数据包
  4. scrollview里面多张图片,每张都能放大缩小
  5. Google Picasa
  6. nginx 配置正向 HTTP 代理服务器[转]
  7. Java学习之Iterator(迭代器)的一般用法
  8. Java连接Oracle数据库的示例代码
  9. 转:WebDriver(Selenium2) 判断页面是否刷新的方法
  10. stl string常用函数
  11. 《RabbitMQ Tutorial》译文 第 2 章 工作队列
  12. Unix 和&#183; Linux 系统概述
  13. C# web发布设置
  14. 小甲鱼Python第十三讲课后题--014字符串
  15. sg函数的理解
  16. c#task list waitall task waitany
  17. c/c++ 代码中使用sse指令集加速
  18. js常量
  19. WCF异常信息
  20. RocEDU.阅读.写作选择书目

热门文章

  1. 06 windows安装Python+Pycharm+Scrapy环境
  2. Java8 Lambda表达式、函数式接口和方法引用
  3. day12 keepalived高可用
  4. 字符串属性转变List属性存入数据库
  5. Linux学习 - 网络命令
  6. 【Linux】【Services】【SaaS】Docker+kubernetes(3. 用ansible管理机器和软件)
  7. vue 项目如何使用animate.css
  8. 制作一个有趣的涂鸦物联网小项目(涂鸦模组SDK开发 CBU BK7231N WiFi+蓝牙模组 HSV彩色控制)
  9. KrakenD url匹配通配符 url_pattern wildcard
  10. Java 在Word中嵌入多媒体(视频、音频)文件