zoukankan      html  css  js  c++  java
  • ECNUOJ 2143 端午节快乐

    端午节快乐

    Time Limit:1000MS Memory Limit:65536KB
    Total Submit:1720 Accepted:868

    Description 

    有一段有趣的传说。公元前340年,爱国诗人、楚国大夫屈原,面临亡国之痛,于五月五日,悲愤地怀抱大石投汩罗江,为了不使鱼虾损伤他的躯体,人们纷纷用竹筒装米投入江中。以后,为了表示对屈原的崇敬和怀念,每到这一天,人们便用竹筒装米,投江祭奠,这就是我国最早的粽子——“筒粽”的由来。

    今天是端午节,ECNU决定请大家吃粽子。恰好,今天超市为了迎合"端午节",推出了"端午大酬宾",即促销活动。严格的买三送一,买五送二。
    ECNU想用现有的钱,买最多的粽子,但是他自己又不会算,所以希望你能帮帮他。

    Input 

    输入第一行为一个数N(1<=N<=100),表示测试数据的组数。
    每组测试数据有两个整数,A,B (0<=A<=1000,0<B<10)表示ECNU有A元钱,每个粽子价格为B元钱,超市推出了买5个送2个,和买3个送1个的活动。

    Output 

    输出ECNU最多能买到的粽子数量。

    Sample Input 

    2
    10 3
    22 3

    Sample Output 

    4
    9


    Hint:
    有两组测试数据:
    对于第一组测试数据:有10元钱,粽子3元一个,可以买3个,但是买3送1,所以最后有4个。
    对于第二组测试数据:有22元钱,粽子3元一个,可以买7个,但是买5送2,所以最后有9个。

    Source

    第一届程序设计竞赛

    解题:一道dp题,记忆化搜索啦

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int maxn = 1010;
     4 int dp[maxn],A,B;
     5 int dfs(int money) {
     6     if(money < B) return 0;
     7     if(dp[money]) return dp[money];
     8     int ret = 0;
     9     if(money >= B*5) ret = max(ret,dfs(money - B*5) + 7);
    10     if(money >= B*3) ret = max(ret,dfs(money - B*3) + 4);
    11     if(money >= B) ret = max(ret,dfs(money - B) + 1);
    12     return dp[money] = ret;
    13 }
    14 int main() {
    15     int n;
    16     scanf("%d",&n);
    17     while(n--) {
    18         scanf("%d%d",&A,&B);
    19         memset(dp,0,sizeof dp);
    20         printf("%d
    ",dfs(A));
    21     }
    22     return 0;
    23 }
    View Code
  • 相关阅读:
    DP专集
    FJUT ACM 1212 集训队的药药切克闹
    Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2, combined) C. Travelling Salesman and Special Numbers (组合数学)
    牛客网 Wannafly挑战赛8 C-小C打比赛 (状压DP)
    HDU 1260 TICKETS (简单DP)
    汇编入门学习笔记 段内转移和段间转移
    汇编入门学习笔记 循环程序设计
    汇编入门学习笔记 分支程序举例
    汇编入门学习笔记 16X+Y
    POJ
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/4617680.html
Copyright © 2011-2022 走看看