zoukankan      html  css  js  c++  java
  • Xtreme8.0

    Xtreme8.0 - Kabloom

    题目连接:

    https://www.hackerrank.com/contests/ieeextreme-challenges/challenges/kabloom

    Description

    The card game Kabloom is played with multiple decks of playing cards. Players are dealt 2 n cards, face up and arranged in two rows of n cards. The players must discard some of the cards, so that the cards that remain in the first row match the rank of the cards that remain in the second row. The cards match only in rank (e.g. an Ace of Hearts matches any other Ace regardless of suit), but they must appear in the same order in each row. The players are not able to rearrange the order in which the cards appear. Note also that a Joker can match any card including another Joker .
    The goal is to maximize the sum of the point value of the cards that remain. Aces are worth 20 points, face cards are worth 15 points, and the numbered cards are worth the number on the card (e.g. the Seven of Clubs is worth 7 points).The value of a Joker is equal to the card with which it is matched, e.g. a Joker matched with an Ace is worth 20 points, a Joker matched with a face card is worth 15 points, etc. If two Jokers are matched with each other, they are worth 50 points each.

    Input

    The input is made up of multiple test cases (#test cases<=30, if 1<=n<=10 or #test cases<=10 if 10<=n<=1000). Each test case contains three lines of input.
    The first line in each test case is an integer n , 1 <= n <= 1,000, indicating how many cards are in each row.
    The second line of the test case will contain n symbols representing the ranks of the cards in the first row. Each symbol will be chosen from the list {A, 2, 3, 4, 5, 6, 7, 8, 9, T, J, Q, K, R}. The symbols in the list represent the following ranks, respectively, {Ace, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King, Joker}. Similarly, the third line of the test case will contain the n symbols of the cards in the second row.
    The input will end with a 0 on a line by itself.

    Output

    For each test case, output the value of the best Kabloom hand on a line by itself. Note that the cards that comprise the best Kabloom hand may not be unique for a test case.
    Note: Every line of output should end in a newline character .

    Sample Input

    9
    6 3 7 4 2 A K R T
    3 5 4 7 R A Q K T
    0

    Sample Output

    140

    Hint

    题意

    给你2n个扑克牌,每行n张牌

    你需要扔掉一些牌,使得上下两层牌一一对应。

    如果两个A对应,那么可以得20分,如果是脸牌的话,那么就可以得15分,其他就是牌的分值。

    王可以替代任意牌,如果是两张王牌对应的话,那么可以得50分。

    问你最多可以得多少分,答案需要乘以2

    题解

    比较裸的dp,带权的最长公共子序列

    代码

     #include<bits/stdc++.h>
    using namespace std;
    const int maxn = 1e3+6;
    
    
    int add(char a,char b){
        if(a=='R'&&b=='R')return 50;
        if(a=='R'){
            if(b=='A')return 20;
            if(b=='Q')return 15;
            if(b=='K')return 15;
            if(b=='J')return 15;
            if(b=='T')return 10;
            return b-'0';
        }
        if(b=='R'){
            if(a=='A')return 20;
            if(a=='Q')return 15;
            if(a=='K')return 15;
            if(a=='J')return 15;
            if(a=='T')return 10;
            return a-'0';
        }
        if(a=='A')return 20;
        if(a=='Q')return 15;
        if(a=='K')return 15;
        if(a=='J')return 15;
        if(a=='T')return 10;
        return a-'0';
    }
    char a[maxn][5],b[maxn][5];
    int n,dp[maxn][maxn];
    int main()
    {
        while(scanf("%d",&n)!=EOF)
        {
            if(n==0)break;
            memset(dp,0,sizeof(dp));
            for(int i=1;i<=n;i++)
                scanf("%s",a[i]);
            for(int i=1;i<=n;i++)
                scanf("%s",b[i]);
            for(int i=1;i<=n;i++){
                for(int j=1;j<=n;j++){
                    dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
                    if(a[i][0]==b[j][0]||a[i][0]=='R'||b[j][0]=='R'){
                        dp[i][j]=max(dp[i][j],dp[i-1][j-1]+add(a[i][0],b[j][0]));
                    }
                }
            }
            cout<<dp[n][n]*2<<endl;
        }
    }
  • 相关阅读:
    【极角排序、扫描线】UVa 1606
    【计算几何】是时候知道这些函数了
    【技巧性(+递归运用)】UVa 1596
    【策略】UVa 11389
    【策略】UVa 1344
    夏季吃西瓜,会勤上厕所,会导致体内缺水,导致便秘,,会长豆豆
    Alt+Shift+R组合键,用来在一个java文件中批量的重命名变量。
    Pycharm-professional-2017.2.3破解安装
    通过反编译深入理解Java String及intern
    转:MyEclipse安装Eclipse Memory Analyzer插件,并进行错误文件分析流程
  • 原文地址:https://www.cnblogs.com/qscqesze/p/5958777.html
Copyright © 2011-2022 走看看