完美世界 2016 笔试 编程第二题

来源:互联网 发布:java字节码反编译工具 编辑:程序博客网 时间:2024/04/27 16:26


#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<queue>#include<stack>#include<vector>#include<set>#include<map>#define L(x) (x<<1)#define R(x) (x<<1|1)#define MID(x,y) ((x+y)>>1)#define eps 1e-8using namespace std;#define N 105int a[N];int n,m,s;int dp[N][N];multiset<int>ss;multiset<int>::iterator it;int get(int x,int y){    ss.clear();    for(int i=x;i<=y;i++)        ss.insert(a[i]);    int ans=0;    int temp=m;    for(it=ss.begin();it!=ss.end();++it)    {        if(temp<*it) break;        ans++;        temp-=*it;    }    return ans;}int dfs(int x,int y){     if(x>=n) return 0;     if(y>=s) return 0;     if(dp[x][y]!=-1) return dp[x][y];     dp[x][y]=0;     for(int i=y;i<s;i++)     {         dp[x][y]=max(dp[x][y],get(y,i)+dfs(x+1,i+1));     }     return dp[x][y];}int main(){    int i,j;    while(~scanf("%d%d%d",&s,&m,&n))    {         for(int i=0;i<s;i++)            scanf("%d",&a[i]);         memset(dp,-1,sizeof(dp));         printf("%d\n",dfs(0,0));    }    return 0;}


1 0
原创粉丝点击