记录编号 |
252920 |
评测结果 |
AAAAAAAAAA |
题目名称 |
买汽水 |
最终得分 |
100 |
用户昵称 |
MistyEye |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.002 s |
提交时间 |
2016-04-21 11:08:06 |
内存使用 |
0.31 MiB |
显示代码纯文本
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
int read(){
int x=0; char ch=getchar();
while(ch<'0'||ch>'9')ch=getchar();
while(ch>='0'&&ch<='9'){
x=x*10+ch-'0';
ch=getchar();
}
return x;
}
using namespace std;
int N, M, m[55];
int end[55];
int ans =0;
void dp(int n, int v){
ans =max(ans, v);
if(n>=N||ans==M)return;
for(int i=n+1; i<=N; i++){
if(m[i]>M-v)return;
if(end[i]+v<=ans)return;
dp(i, v+m[i]);
}
return;
}
int main(){
freopen("drink.in","r",stdin);
freopen("drink.out","w",stdout);
N =read(), M =read();
for(int i=1; i<=N; i++)m[i] =read();
sort(m+1, m+N+1);
// for(int i=1; i<=N; i++)printf("%d ", m[i]);
for(int i=N; i>=1; i--)end[i]=m[i]+end[i+1];
// for(int i=1; i<=N; i++)printf("%d ", end[i]);
dp(0, 0);
printf("%d", ans);
return 0;
}