锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
浠ュ墠娌℃湁閬囧埌榪囪繖鏍風(fēng)殑DP棰樼洰
榪欓鍔犳繁浜?jiǎn)鎴戝浜?#8220;姣忎釜瀛愰棶棰樼殑絳旀閮芥槸鏈浣崇瓟妗?#8221;鐨勭悊瑙?br />
棣栧厛鏄澶栫殑璁$畻
灝嗚寖鍥翠互鍐呯殑騫歌繍鏁板瓧鎵撹〃
鐒跺悗浠庤緭鍏ユ暟瀛桸寮濮嬮掑噺DP璁$畻
N鐨勬鏁頒負(fù)0
濡傛灉鏈鍚?鐨勬鏁頒負(fù)姝f暟
璇存槑鏈夎В
鍐嶄粠0寮濮嬮掑瀵繪壘瑙g殑璺緞
涓嶈繃榪欎釜鏂規(guī)硶鏈鍚庝篃娌℃湁閫氳繃tc鐨勭郴緇熸祴璇?br />
鏁板瓧涓澶у氨瓚呮椂浜?br />
鍚庨潰鍙堟椂闂村啀鐮旂┒涓涓?br />
鐪嬬湅鏈夋病鏈夊姙娉曞湪鏀硅繘
2 import java.util.regex.*;
3 import java.text.*;
4 import java.math.*;
5 import java.awt.geom.*;
6
7 public class TheSumOfLuckyNumbers
8 {
9
10 public int[] sum(int n)
11 {
12 ArrayList<Integer> table = calTable();
13 int[] dp = new int[n+1];
14 Arrays.fill(dp, Integer.MAX_VALUE-10);
15 dp[n] = 0;
16 int i , j;
17 for(i = n; i > 0 ; -- i){
18 for(int lucky:table){
19 if(i - lucky >=0 && dp[i] + 1 < dp[i - lucky])
20 dp[i - lucky] = dp[i] + 1;
21 }
22 }
23 if(dp[0] == Integer.MAX_VALUE)
24 return new int[0];
25 ArrayList<Integer> ans = new ArrayList<Integer>();
26 int total = dp[0]-1;
27 for(i = 0 ; i <= n; ++ i){
28 for(int lucky:table){
29 if(i + lucky <= n && dp[i + lucky] == total){
30 ans.add(lucky);
31 i += lucky-1;
32 total--;
33 break;
34 }
35 }
36 }
37 int[] ret = new int[ans.size()];
38 for(i = 0 ; i < ans.size(); ++ i)
39 ret[i] = ans.get(i);
40 return ret;
41 }
42
43
44
45 public ArrayList<Integer> calTable(){
46 ArrayList<Integer> table = new ArrayList<Integer>();
47 table.add(4);
48 table.add(7);
49 int i = 1;
50 while(i < 7){
51 ArrayList<Integer> temp = new ArrayList<Integer>();
52 for(int j = 0 ; j < table.size(); ++ j){
53 int newItem = table.get(j) * 10;
54
55 temp.add(newItem+4);
56 temp.add(newItem+7);
57 }
58 i++;
59 table.addAll(temp);
60 }
61 return table;
62 }
63 }
]]>
涓涓僵鐞冮泦鍚堬紝閲嶉噺鍚勪笉鐩稿悓錛岀粰瀹氬鍣ㄥぇ灝忓浣曞甫鍥炲敖閲忓鐨勫僵鐞?br />
闄愬埗鏉′歡涓僵鐞冧釜鏁板皬浜?3
鍥犳鐢―P鏉ヨ綆楀鏉傚害涓?^13*20*10鏄彲浠ユ帴鍙楃殑
榪欎竴棰樼敤memo鏂規(guī)硶鏇村姞鍚堥傚洜涓轟細(xì)鏈夊ぇ閲忕殑鏁版嵁涓嶉渶瑕佽綆?br />
姣忎竴嬈¢兘榪唬璁$畻鎵鏈夋湭濉殑鐞?br />
鎶婄悆鏀捐繘鍙h鎴栬呯洿鎺ュ紑濮嬪~涓嬩竴琚?br />
DP涓変釜鍙傛暟鏄痬ask錛屽墿浣欒鏁板拰鏈鍓╀綑絀洪棿
import java.util.*;
2import java.util.regex.*;
3import java.text.*;
4import java.math.*;
5import java.awt.geom.*;
6
7public class CollectingMarbles
8{
9 int[][][] dic;
10 int L;
11 int[] mw;
12 int bagNumber;
13 int cap;
14
15 public int mostMarbles(int[] marblesWeights, int bagCapacity, int numberOfBags)
16 {
17 L = marblesWeights.length;
18 mw = marblesWeights;
19 bagNumber = numberOfBags;
20 cap = bagCapacity;
21 dic = new int[1<<L][bagNumber+1][cap+1];
22 for(int[][] a : dic)
23 for(int[] b : a)
24 Arrays.fill(b, -1);
25 int ans = recur(0, bagNumber, cap);
26 return ans == -1? 0 : ans;
27 }
28
29 private int recur(int mask, int bagNumber, int cur) {
30 // TODO Auto-generated method stub
31 if(bagNumber == 0)
32 return 0;
33 if(dic[mask][bagNumber][cur] > -1)
34 return dic[mask][bagNumber][cur];
35 dic[mask][bagNumber][cur] = 0;
36 for(int i = 0 ; i < L ; ++ i){
37 if((mask & (1 << i)) == 0 && mw[i] <= cur){
38 dic[mask][bagNumber][cur] = Math.max(dic[mask][bagNumber][cur],
39 1+recur(mask|1<<i, bagNumber, cur-mw[i]));
40
41 }
42 dic[mask][bagNumber][cur] = Math.max(dic[mask][bagNumber][cur],
43 recur(mask, bagNumber-1, cap));
44 }
45
46 return dic[mask][bagNumber][cur];
47 }
48}
]]>
鏍囧噯鐨凞P棰樼洰
鍦ㄨ繍綆椾腑鍑犲蹇界暐浜?jiǎn)姣旇緝妫鏌ワ紝鐗規(guī)畩鍊?br />
瀵艱嚧閿欒浜?jiǎn)涓?br />
鍋氶鐩湪涓昏鎬濊礬鏈変簡(jiǎn)涔嬪悗榪樻槸瑕佷粩緇嗚冭檻鐗規(guī)畩鎯呭喌
寰寰浜哄鍏蟲敞鐨勫湴鏂瑰氨鍦ㄨ繖閲?br />
import java.util.*;
2import java.util.regex.*;
3import java.text.*;
4import java.math.*;
5import java.awt.geom.*;
6
7public class TriviaGame
8{
9 public int maximumScore(int[] points, int tokensNeeded, int[] bonuses)
10 {
11 int L = points.length;
12 int[][] dic = new int[L][tokensNeeded+1];
13 for(int[] i:dic)
14 Arrays.fill(i, -100000);
15 int i;
16 dic[0][0] = -1 * points[0];
17 dic[0][1] = points[0];
18 if(tokensNeeded == 1)
19 dic[0][0] = dic[0][1]+bonuses[0];
20 for(i = 1; i < L; ++ i){
21 if(dic[i-1][0] - points[i] > dic[i][0])
22 dic[i][0] = dic[i-1][0] - points[i];
23 int j;
24 for(j = 1; j < Math.min(i+2, tokensNeeded); ++ j){
25 int a = dic[i-1][j-1] + points[i];
26 int b = dic[i-1][j] - points[i];
27 dic[i][j] = Math.max(a, b);
28 }
29 if(j == tokensNeeded){
30 dic[i][j] = dic[i-1][j-1] + points[i];
31 dic[i][j] += bonuses[i];
32 if(i != L - 1 && dic[i][j] > dic[i][0])
33 dic[i][0] = dic[i][j];
34 }
35
36 }
37 int max = dic[L-1][0];
38 for(int in:dic[L-1])
39 if(in > max)
40 max = in;
41 return max;
42 }
43}
]]>
http://www.topcoder.com/stat?c=problem_statement&pm=8307&rd=11124
涓緇凱attern錛屾瘡涓綅涓婃槸瀛楁瘝鎴栬呴氶厤絎?#8220;錛?#8221;錛屾眰鎭板ソ絎﹀悎K涓狿attern鐨勫瓧絎︿覆鏁?br />
榪欎釜棰樼洰楹葷儲(chǔ)鍦ㄦ伆濂斤紙exactly錛変笂
鍚﹀垯瀹屽叏鍙互鏆村姏澶勭悊
榪欓噷瑕佹伆濂斤紝鍗崇鍚圞涓屼笉絎﹀悎K錛?涓?br />
鐢―P閫愪釜浣嶇疆澶勭悊
璁$畻鍑烘瘡涓瓧姣嶅尮閰嶇殑Pattern闆嗗悎錛屽啀鍜屽墠闈㈢殑Pattern闆嗗悎鍙栦氦闆嗚綆楄繖涓琛岀殑緇撴灉
璁$畻榪囩▼涓彇浜ら泦鐨?#8220;&”閿欏啓鎴愪簡(jiǎn)“|” 澶敓鐤忎簡(jiǎn)