HDU2386Dart Challenge题解动态规划DP

来源:互联网 发布:pc看图软件 谷歌 编辑:程序博客网 时间:2024/06/06 09:09

Dart Challenge

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 268    Accepted Submission(s): 134


Problem Description
Clark and Harry are siblings. As they had been rivals since their early childhood, their father decided that both should concentrate on a different sport when they were thirteen. That way, they would not have to compete for success. Now both are twenty years old and excel in different fields: Clark plays chess while Harry participates in dart-tournaments.
Having won a series of three tournaments in a row, Harry started teasing Clark about not having as much success. Clark retorted that chess was less luck-based and thus more difficult. That offended Harry and led him to the reply that in order to play darts optimally, a lot of combinatorics are necessary. Clark returned an icy smile and the comment that memorizing all different late-games could hardly be called “combinatorics”.
This is how it came to the wager. Harry bets that he can find all possible late-games for generalized dart-boards where memorized late-games do not help him. When Clark showed him a list of possible dartboards, Harry had to admit that he probably bit off more than he can chew. As his friend, you have to help him!

A dart-board consists of different areas. Each area has an assigned score for hitting it. Each area also has a double- and a triple-field that are worth twice and three times the score of the area. The only exception is the area for the highest score: It has only a double- and no triple-field! Given the values of the different areas you have to find the number of possible scores that can be obtained with a given number of darts.
 


Input
The inputs start with a line containing a single integer n. Each of the n following lines contains one test case. Each test case starts with two integers 1 <= a <= 100; 1 <= k <= 50, the number of different areas on the
dart-board and the number of darts. a integers 1 <= si <= 100 follow. si is the score for hitting area i. All scores are distinct. Remember that each area has a double- and, with exception of the area with the highest score, a triple-field. It is always possible to score 0 with any given dart by not hitting the board.
 


Output
The output for every test case begins with a line containing “Scenario #i:”, where i is the number of the scenario counting from 1. After that, output a single line containing the number of different scores that can be obtained with k darts on the given board. Terminate each test case with an empty line.
 


Sample Input
321 3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 252 2 20 101 50 1
 


Sample Output
Scenario #1:172Scenario #2:9Scenario #3:101
 


Source
HDU 2008-10 Public Contest
 


Recommend
lcy
二维01背包计数
我刚开始用一维状态,还把分数拆成三个
背包体积也估计过大,导致爆空间
状态:
d[i][j]表示i个数能否组成j
状态转移方程:
if(d[j-1][k])
     {
      d[j][k]=1;
      d[j][k+a[i]]=1;
      d[j][k+2*a[i]]=1;
      if(p!=i)
       d[j][k+3*a[i]]=1;   
     }
边界:
d[0][0]=1;
代码:
原创粉丝点击