豆豆与黄金剑, 一道典型DP题的C#解法

题目:

Description

有只企鹅叫豆豆,总是被别的企鹅欺负。豆豆在长期的隐忍之后,掌握了所有企鹅的高度和攻击力强度,还得到了一把黄金剑。在拥有了黄金剑以后,豆豆终于可以展开绝地大反击。但这把黄金剑的用法却很奇怪。

首先,豆豆第一次可以选择任何一只企鹅开始挑战。豆豆这一次必胜。

再次,当豆豆已经挑战过某一只企鹅后,再下一次的挑战对象只能是比上一名对手高,且比上一名对手攻击力强的企鹅。这样豆豆必胜。否则黄金剑会觉得打的没意思而故意发脾气输掉。豆豆还会被大家集体暴打。

面对着这把脾气很大的黄金剑,豆豆想请你帮助他计算一下,他最多可以连续击败多少只企鹅?

Input

第一行:一个数据 n,代表企鹅群里除了豆豆一共有 n(1 ≤ n ≤ 1000)只企鹅。
第2至第 n+1行:每行2个数字。第 i+1行的第一个数字为企鹅 i的高度。第 i+1行的第二个数字为企鹅 i的攻击力。0 ≤ 高度,攻击力 ≤ 1,000,000。

Output

一个数。代表豆豆最多可以连续击败的企鹅数。

Sample Input

 
Sample Input #1Sample Input #2
3
1 3
3 2
2 4
5
10 1
9 2
7 3
6 4
5 5

Sample Output

 
Sample Output #1Sample Output #2
21

C#代码如下:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> 1 public class QQ
2 ExpandedBlockStart.gifContractedBlock.gif {
3ExpandedSubBlockStart.gifContractedSubBlock.gifpublicintHeight{get;set;}
4ExpandedSubBlockStart.gifContractedSubBlock.gifpublicintATK{get;set;}
5}

6 class Program
7 ExpandedBlockStart.gifContractedBlock.gif {
8staticvoidMain(string[]args)
9ExpandedSubBlockStart.gifContractedSubBlock.gif{
10intn,h,atk;
11Console.WriteLine("inputthepopulationn(1<=n<=1000):");
12while((n=int.Parse(Console.ReadLine()))>1000||n<1);
13List<QQ>population=newList<QQ>(n+1);
14
15Console.WriteLine("inputtheHeightandATKproperties,splitbyonespace:");
16for(inti=0;i<n;i++)
17ExpandedSubBlockStart.gifContractedSubBlock.gif{
18ExpandedSubBlockStart.gifContractedSubBlock.gifstring[]property=Console.ReadLine().Split(newChar[]{''});
19if((h=int.Parse(property[0]))<1000000&&h>-1&&
20(atk=int.Parse(property[1]))<1000000&&atk>-1)
21ExpandedSubBlockStart.gifContractedSubBlock.gifpopulation.Add(newQQ{Height=h,ATK=atk});
22}

23
24population.Sort((a,b)=>
25ExpandedSubBlockStart.gifContractedSubBlock.gif{
26if(a.Height!=b.Height)
27returna.Height-b.Height;
28elseif(a.ATK!=b.ATK)
29returna.ATK-b.ATK;
30else
31return0;
32}
);
33
34int[]tb=newint[n];
35for(inti=0;i<n;i++)
36ExpandedSubBlockStart.gifContractedSubBlock.gif{
37tb[i]=1;
38}

39
40for(inti=0;i<n;i++)
41ExpandedSubBlockStart.gifContractedSubBlock.gif{
42for(intj=0;j<i;j++)
43ExpandedSubBlockStart.gifContractedSubBlock.gif{
44if(population[i].Height>population[j].Height&&
45population[i].ATK>population[j].ATK&&tb[i]<tb[j]+1)
46ExpandedSubBlockStart.gifContractedSubBlock.gif{
47tb[i]=tb[j]+1;
48}

49}

50}

51Console.WriteLine("theansweris:"+tb.Max().ToString());
52}

53}

PS:还是可以更健壮更优化的,欢迎交流 ;-)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值