您的位置:首页 > 其它

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

2014-11-30 18:14 337 查看


X的畅想



Time Limit: 1000MS Memory limit: 65536K


题目描述

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

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


输入

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

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

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


输出

 

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


示例输入

4
10 10
2 4
2 2
3 5
3 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: