博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Xtreme8.0 - Kabloom dp
阅读量:5891 次
发布时间:2019-06-19

本文共 3567 字,大约阅读时间需要 11 分钟。

Xtreme8.0 - 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
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<
<

转载地址:http://dhysx.baihongyu.com/

你可能感兴趣的文章
 百度推广:下拉框与相关搜索优化分析
查看>>
《Android游戏开发详解》一1.3 声明和初始化变量
查看>>
Go程序设计语言2.1 名称
查看>>
Git 系列(四):在 Git 中进行版本回退
查看>>
storm集群的监控
查看>>
《Android Studio应用开发实战详解》——第1章,第1.3节Android系统架构
查看>>
记录一些React的一些细节,会不断更新
查看>>
自己常用的mixin(持续更新)
查看>>
[译] 移动技术在改善财务健康方面的作用
查看>>
播放音频的工具类
查看>>
iOS面试题03-原理篇
查看>>
JavaScript 基础之原型和原型链
查看>>
jvm逃逸分析
查看>>
数组、字符串常用方法
查看>>
前端面试指南
查看>>
【整理】18种推荐的CSS命名和书写规范
查看>>
new命令的原理
查看>>
人工智能:是拿什么向奇点迫近的?
查看>>
南京a货翡翠,天津a货翡翠
查看>>
css3 渐变
查看>>