青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 33,  comments - 33,  trackbacks - 0
總述:
這次的SRM題目四平八穩(wěn),可惜在比賽期間發(fā)揮不好,成績(jī)也就一般了。主要失誤是看錯(cuò)題目。。。

250 Point BadVocabulary
題意:在String[] vocabulary中查找符合條件的字符串的數(shù)目,條件如下:
1. 前綴含有badPrefix
2.或后綴含有badSuffix
3.或子串含有badSubstring,并且子串不是該字符串的前綴和后綴

題解:題意已經(jīng)很清楚了,直接按照要求做即可。直接放代碼:
class BadVocabulary
{
    
public boolean IsPrefix(String _pre,String _src)
    
{
        
if(_src.length() >= _pre.length())
        
{
            
if(_src.substring(0, _pre.length()).compareTo(_pre) == 0)
                
return true;
            
else
                
return false;
        }

        
return false;
    }


    
public boolean IsSuffix(String _suf,String _src)
    
{
        
if(_src.length() >= _suf.length())
        
{
            
int len = _src.length();
            
if(_src.substring(len - _suf.length(), len).compareTo(_suf) == 0)
                
return true;
            
else
                
return false;
        }

        
return false;
    }


    
public boolean IsSub(String _sub,String _src)
    
{
        
for(int k = 1; k < _src.length()-_sub.length(); ++k)
        
{
            String su 
= _src.substring(k, k+_sub.length());
            
if(su.compareTo(_sub) == 0)
            
{
                
return true;
            }

        }

        
return false;
    }


    
public int count(String badPrefix, String badSuffix, String badSubstring, String[] vocabulary)
    
{
        
int cnt =0;
        
for(int i = 0;i < vocabulary.length; ++i)
        
{
            
int len = vocabulary[i].length();
            
if(IsPrefix(badPrefix,vocabulary[i]))
                
++cnt;
            
else if(IsSuffix(badSuffix,vocabulary[i]))
                
++cnt;
            
else
            
{

                
if(IsSub(badSubstring,vocabulary[i]))
                    
++cnt;

            }

        }

        
return cnt;
    }

}

500 Points BuyingFlowers
題意:給出int[] roses, int[] lilies,分別代表rose和lilie花束的花的支數(shù),要求選擇任意roses和lilies的組合,注意兩者必須同時(shí)選取,如選了roses[1],lilies[1]也要
選,然后將這些花布成R*C的矩陣,要求任意相鄰的兩塊都要有不同的花,最后求在這些可行解中,abs(R-C)的最小值。
題解:按要求暴力,可以按位暴力或者DFS枚舉組合暴力。
那么怎么符合矩陣的要求呢?
觀察例子,不難發(fā)現(xiàn)當(dāng)abs(sumOfRoses-sumOfLilies)小于等于1時(shí),必可符合題目要求。
代碼:
class BuyingFlowers
{
    
private int GetRCD(int _sum)
    
{
        
int ret = 1<<30;
        
for(int i = 1; i * i <= _sum; ++i)
        
{
            
if(_sum%== 0)
                ret 
= Math.min(ret, Math.abs((_sum/i) - i));
        }

        
return ret;
    }


    
public int buy(int[] roses, int[] lilies)
    
{
        
int len = roses.length;
        
int limit = 1 << len;
        
int sumR = 0;
        
int sumL = 0;
        
int minC = 1 << 30;
        
for(int i = 1; i < limit; ++i)
        
{
            sumR 
= 0;
            sumL 
= 0;
            
for(int j = 0; j < len; ++j)
            
{
                
int k = i&(1<<j);
                
if(k == 1)
                
{
                    sumR 
+= roses[j];
                    sumL 
+= lilies[j];
                }

            }

            
if(Math.abs(sumR-sumL) <= 1)
            
{
                minC 
= Math.min(minC, GetRCD(sumR+sumL));
            }

        }

        
if(minC == 1 << 30)
            
return -1;
        
else
            
return minC;
    }

}

1000 Points - SolitaireChess
題意:8*8棋盤,有兩種棋子,N(馬)和P(兵),馬行日,兵只能向前走,但兵到對(duì)面最頂后能升馬。
給出初始棋盤狀態(tài)和最終棋盤狀態(tài),計(jì)算最小的移動(dòng)步數(shù)。
題解:典型的狀態(tài)DP。首先用BFS計(jì)算初始棋子i到結(jié)束棋子j的花費(fèi)cost[i][j]
設(shè)狀態(tài)S,i為S二進(jìn)制中位數(shù)為1的個(gè)數(shù),S表示i個(gè)初始棋子放到S對(duì)應(yīng)的結(jié)束狀態(tài)的最小花費(fèi),那么dp[1<<n-1]即為答案
狀態(tài)轉(zhuǎn)移方程:
dp[S] = min{dp[pre]+cost[i][j]},pre為可以推出S的狀態(tài)
代碼:
import java.math.*;
import java.util.*;
import java.util.Queue;
import java.util.List;
import java.util.ArrayList;
import java.util.LinkedList;  


class SolitaireChess
{
    
private int dsx[] = {2,1,-1,-2,-2,-1,1,2};
    
private int dsy[] = {1,2,2,1,-1,-2,-2,-1};
    
private class State
    
{
        
public int x;
        
public int y;
        
public char s;

        
public State(int _x,int _y,char _s)
        
{
            x 
= _x;
            y 
= _y;
            s 
= _s;
        }


        
public void ReValue(State _state)
        
{
            x 
= _state.x;
            y 
= _state.y;
            s 
= _state.s;
        }


        
public boolean isEqual(State _state)
        
{
            
return (x == _state.x&&
                    y 
== _state.y&&
                    s 
== _state.s);
        }

    }


    
private List<State> listInit;
    
private List<State> listTarget;
    
private int [][]cost;

    
private List<State> getState(String[] board)
    
{
        List
<State> reList = new ArrayList<State>();
        
for(int i = 0; i < board.length; ++i)
        
{
            
for(int j = 0; j < board[i].length(); ++j)
            
{
                
if(board[i].charAt(j) != '.')
                
{
                    reList.add(
new State(i,j,board[i].charAt(j)));
                }

            }

        }

        
return reList;
    }


    
private int minCost(State _s1,State _s2)
    
{
        
if(_s1.s == 'P' && _s2.s == 'P')
        
{
            
if(_s1.y != _s2.y)
                
return Integer.MAX_VALUE;
            
if(_s1.x < _s2.x)
                
return Integer.MAX_VALUE;
            
else
                
return _s1.x - _s2.x;
        }

        
if(_s1.s == 'P' && _s2.s == 'N')
        
{
            
return BFS(new State(0,_s1.y,'P'),_s2) + _s1.x;
        }

        
if(_s1.s == 'N' && _s2.s == 'P')
            
return Integer.MAX_VALUE;
        
if(_s1.s == 'N' && _s2.s == 'N')
            
return BFS(_s1,_s2);
        
return Integer.MAX_VALUE;
    }


    
private int BFS(State _s1, State _s2)
    
{
        Queue
<State> que = new LinkedList<State>();
        
int[][] dist = new int[10][10];
        
for(int i = 0; i < 8++i)
            
for(int j = 0; j < 8++j)
            
{
                dist[i][j] 
= Integer.MAX_VALUE;
            }

        dist[_s1.x][_s1.y] 
= 0;
        que.add(_s1);
        State nextState 
= new State(00'\0');
        
while (!que.isEmpty()) 
        
{
            State curState 
= que.poll();
            
if ((curState.x == _s2.x) && (curState.y == _s2.y ))
                
break;

            
for (int i = 0; i < 8++i) 
            
{
                nextState.x 
= curState.x + dsx[i];
                nextState.y 
= curState.y + dsy[i];
                
if (nextState.x >= 0 && nextState.x < 8 && nextState.y >= 0
                        
&& nextState.y < 8
                
{
                    
if (dist[nextState.x][nextState.y] > dist[curState.x][curState.y] + 1
                    
{
                        
                        dist[nextState.x][nextState.y] 
= dist[curState.x][curState.y] + 1;
                        que.add(
new State(nextState.x,nextState.y,'N'));
                    }

                }

            }

        }

        
return dist[_s2.x][_s2.y];
    }


    
private int StateDP(int _size)
    
{
        
int limit = 1 << _size;
        
int dp[] = new int[limit];
        Arrays.fill(dp, Integer.MAX_VALUE);
        dp[
0= 0;
        
for(int state = 0; state < limit; ++state)
        
{
            
if(dp[state] != Integer.MAX_VALUE)
            
{
                
int i = Integer.bitCount(state);
                
for(int j = 0; j < _size; ++j)
                
{
                    
if(((state >> j)&1== 0)
                    
{
                        
if(cost[i][j] != Integer.MAX_VALUE)
                        
{
                            
int newState = (state | (1 << j));
                            dp[newState] 
= Math.min(dp[newState], dp[state] + cost[i][j]);
                        }

                    }

                }

            }

        }

        
if(dp[limit-1== Integer.MAX_VALUE)
            
return -1;
        
else
            
return dp[limit-1];
    }

    
public int transform(String[] board1, String[] board2)
    
{
        listInit 
= getState(board1);
        listTarget 
= getState(board2);
        
if(listInit.size() != listTarget.size())
            
return -1;
        
int size = listInit.size();
        cost 
= new int[size][size];
        
for(int i = 0; i < size; ++i)
        
{
            
for(int j = 0; j < size; ++j)
            
{
                cost[i][j] 
= minCost(listInit.get(i),listTarget.get(j));
            }

        }

        
return StateDP(size);
    }

}
posted on 2010-12-01 23:56 bennycen 閱讀(310) 評(píng)論(1)  編輯 收藏 引用 所屬分類: 算法題解
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久视频一区| 欧美成人一区二区在线| 亚洲欧洲精品一区| 国产精品欧美日韩一区| 欧美激情在线免费观看| 久久乐国产精品| 亚洲欧美影院| 亚洲日本免费电影| 亚洲高清一二三区| 国产日韩欧美电影在线观看| 欧美日韩在线不卡| 欧美激情麻豆| 国产午夜精品全部视频播放| 亚洲精品一区二区在线| 国产日韩在线播放| 亚洲精选视频免费看| 午夜久久tv| 亚洲午夜精品一区二区| 亚洲伦理一区| 久久精品成人| 久久成人这里只有精品| 久久成人免费电影| 亚洲国产乱码最新视频| 亚洲国产一区视频| 欧美一区二区三区免费视频| 欧美一区二区三区播放老司机| 欧美成人一区在线| 欧美成人午夜77777| 国产亚洲一本大道中文在线| 国产一区在线看| 黄色成人免费网站| 亚洲成人资源网| 亚洲精品国产精品乱码不99| 欧美在线看片| av成人黄色| av成人免费在线观看| 久久男人资源视频| 免费成人av在线看| 欧美日韩你懂的| 亚洲国产精品一区制服丝袜 | 亚洲一区二区欧美| 美乳少妇欧美精品| 亚洲国产精品成人一区二区 | 欧美14一18处毛片| 亚洲激情在线激情| 一区二区三区黄色| 欧美一区二区三区四区高清 | 国产精品人人爽人人做我的可爱| 亚洲人成在线播放网站岛国| 久久一本综合频道| 亚洲欧美制服另类日韩| 国产精品xvideos88| 国产欧美日韩综合精品二区| 亚洲国产cao| 久久亚洲精品一区二区| 亚洲永久免费| 久久久午夜精品| 国产在线精品二区| 欧美中在线观看| 亚洲影视综合| 国产精品一区视频| 亚洲欧洲日韩综合二区| 免费在线看一区| 久久久人成影片一区二区三区观看| 国产一区二区视频在线观看| 欧美在线不卡视频| 亚洲精品国精品久久99热一| 欧美福利电影网| 国产午夜精品视频| 久久九九免费视频| 一区二区精品国产| 国产精品久久久999| 亚洲第一二三四五区| 免费看的黄色欧美网站| 久久久久久久久久码影片| 激情国产一区| 欧美亚洲在线观看| 亚洲日韩欧美一区二区在线| 欧美激情一区在线观看| 日韩亚洲不卡在线| 久久综合给合久久狠狠色| 久久精品亚洲精品| 国产精品久久久久久久浪潮网站| 亚洲人体影院| 亚洲激情综合| 欧美电影在线播放| 欧美刺激性大交免费视频| 99热这里只有精品8| 久热精品视频在线观看| 一区二区三区视频在线看| 国产精品毛片在线| 久久久www成人免费精品| 久久精品国产清自在天天线| 国产精品自拍小视频| 久久久亚洲精品一区二区三区| 亚洲视频每日更新| 欧美日韩精品欧美日韩精品| 亚洲国产精品一区二区三区| 亚洲激情中文1区| 国产精品美女久久久久久久| 久久精品国产精品亚洲精品| 久久亚洲私人国产精品va| 亚洲经典一区| 亚洲午夜久久久| 欧美日韩亚洲一区三区| 欧美一区午夜精品| 久久伊人免费视频| 99在线热播精品免费99热| 亚洲欧美精品suv| 国产精品久久九九| 久久综合999| 欧美日本一区二区三区 | 欧美精品自拍| 欧美在线免费观看| 噜噜噜噜噜久久久久久91| 亚洲影视在线| 亚洲性xxxx| 激情丁香综合| 99视频热这里只有精品免费| 国产专区欧美精品| 亚洲啪啪91| 国产在线精品二区| 日韩写真在线| 欧美日一区二区三区在线观看国产免| 一区二区三区视频免费在线观看 | 国产精品免费网站在线观看| 美女脱光内衣内裤视频久久影院 | 国产一区美女| 亚洲人成久久| 国自产拍偷拍福利精品免费一| 亚洲精品久久嫩草网站秘色| 国内成人在线| 一区二区三区 在线观看视频| 一区二区亚洲| 亚洲一区二区三区在线视频| 亚洲激情欧美| 欧美一区二区免费观在线| 一本色道久久综合一区| 久久国产精品一区二区三区四区| 一区二区三区日韩| 久久全球大尺度高清视频| 性视频1819p久久| 欧美日韩aaaaa| 欧美激情亚洲激情| 欧美日韩和欧美的一区二区| 久久综合色影院| 国产精品免费在线| 亚洲免费观看高清在线观看| 91久久国产自产拍夜夜嗨| 先锋影音久久| 亚洲国产美国国产综合一区二区| 午夜性色一区二区三区免费视频 | 午夜亚洲视频| 亚洲在线不卡| 欧美人妖在线观看| 亚洲大胆av| 欧美揉bbbbb揉bbbbb| 亚洲高清在线精品| 国产精品丝袜久久久久久app| 91久久黄色| 91久久一区二区| 久久亚洲国产精品一区二区| 久久精品夜色噜噜亚洲a∨| 国产精品手机在线| 亚洲天堂av在线免费| 亚洲素人在线| 久久久精品网| 久久久亚洲午夜电影| 国产日韩欧美综合| 亚洲欧美日韩精品久久奇米色影视| 在线亚洲一区二区| 欧美日韩精品是欧美日韩精品| 亚洲国产精品毛片| 亚洲三级影院| 欧美电影免费| 91久久国产综合久久91精品网站| 亚洲精品一区二区三| 欧美激情小视频| 亚洲精华国产欧美| 一个人看的www久久| 欧美日韩久久精品| 99国产精品国产精品毛片| 一区二区日韩伦理片| 欧美日韩国产在线| 日韩视频免费看| 亚洲小说欧美另类社区| 欧美色欧美亚洲另类二区| 中日韩男男gay无套| 亚洲影院一区| 国产精品亚洲综合一区在线观看 | 久久久国产91| 伊人精品在线| 亚洲欧美另类久久久精品2019| 久久精品成人一区二区三区蜜臀| 国产偷国产偷亚洲高清97cao| 久久国产免费| 亚洲国产日韩一级| 宅男66日本亚洲欧美视频| 欧美午夜激情视频| 亚洲欧美综合精品久久成人|