P1705 爱与愁过火 AC于2018.9.11

115 篇文章 2 订阅
87 篇文章 0 订阅

原题

题目背景

(本道题目隐藏了两首歌名,找找看哪~~~)

《爱与愁的故事第一弹·heartache》第三章。

爱与愁大神说这是ta的伤心指数,只不过现在好很多了,翻译只是看你无聊让你动动脑筋罢了(shit~~~)。虽然月落乌啼嘴上骂着:“我去年买了个表……纽曼表……”,但是结果还是请爱与愁大神去Pizza Hut吃了一顿。

题目描述

到了Pizza Hut,爱与愁大神由于不爽,所以存心想坑月落乌啼的钱,ta点了m样菜,每样菜ai元。月落乌啼预计只用n元,于是他让爱与愁大神重新从这m样菜中选r样。爱与愁大神还是想坑钱,于是ta打电话给你,让你编一个程序告诉ta有几种方案可以从m样菜中点取r样菜但是还能超过月落乌啼的预计n元。

输入输出格式

输入格式:

第1行:三个数 m,r,n。

第2行:m个数,每道菜需要的钱ai,两个数之间有空格。

输出格式:

只有一个整数,表示方案总数。

输入输出样例

输入样例#1: 

5 2 8
1 7 2 5 4

输出样例#1: 

4

说明

100%数据:m<=30,r<=m,m<=ai<=90 n<=2700

时限:前两个点1秒,中间两个点3秒,最后一个点6秒。

#include<cstdio>
const int MAXN=1005;
int m,r,n;
int a[MAXN];
int b[MAXN];
int ans;
void dfs(int t,int s,int k)
{
    if(k==r) 
    {
        if(s>n)
        ans++;
        return;
    }
    if(m-t+1<r-k) 
    return;
    if(s>n)
    {
        int w=1,c=m-t+1,d=r-k,e=c-d+1;
        for(int i=1;i<=d;i++)
            w=w*(c-i+1)/i;
        ans+=w;
        return;
    }
    for(int i=t;i<=m;i++)
        if(b[i]==0)
        {
            b[i]=1;
            dfs(i+1,s+a[i],k+1);
            b[i]=0;
        }
}
int main()
{
    scanf("%d%d%d",&m,&r,&n);
    for(int i=1;i<=m;i++)
    scanf("%d",&a[i]);
    dfs(1,0,0);
    printf("%d",ans);
    return 0;
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值