SDUTOJ 3023 X的畅想 我人生的第一个自己AC的DP题 && 递归

来源:互联网 发布:c语言数组存储符号 编辑:程序博客网 时间:2024/06/08 19:51

X的畅想

Time Limit: 1000MS Memory limit: 65536K

题目描述

X在有了一个学妹后,就想有第二个呀,有第二个就像有第三个呀。但是X还不想和之前追到的学妹有冲突,所以只能在剩余的精力与时间里再找学妹了。那么X还能再去追几个学妹呢?

如果X要在剩余精力s和剩余时间t内追学妹,而想追上一个学妹,就需要用掉一定的精力与时间,并且不同的学妹的消耗是不同的。X就要给自己考虑一下了,怎么样才能追到更多的学妹。

输入

第一行输入一个整数n(n < 100)表示要追的学妹的信息。

第二行输入两个整数st(s < 100 , t < 100),表示X剩余的精力s和剩余的时间t

之后连续n行,每行两个整数a表示如果要追上该学妹需要消耗精力a,和花费时间b

输出

 

输出一个整数,表示X可以追到学妹的最大数。

示例输入

410 102 42 23 53 4

示例输出

3

提示

 

来源

 winddreams

#include <stdio.h>#include <string.h>struct node{    int s;    int t;}ls[110];bool vis[110];//标记数组,因为本题不允许一个数据被多次用int mx,n;void js(int jl,int st,int sum){    if(mx < sum)        mx = sum;    for(int i = 0;i < n;i++)    {        if(st >= ls[i].t && jl >= ls[i].s && !vis[i])        {            vis[i] = true;            int a = jl - ls[i].s;            int b = st - ls[i].t;            js(a,b,sum + 1);            vis[i] = false;        }    }}int main(){    int st,jl;    mx = 0;    scanf("%d",&n);    scanf("%d%d",&jl,&st);    memset(vis,false,sizeof(vis));    for(int i = 0;i < n;i++)    {        scanf("%d%d",&ls[i].s,&ls[i].t);    }    js(jl,st,0);    printf("%d\n",mx);    return 0;}



0 0
原创粉丝点击