hdu 4511 小明系列故事 女友的考驗

2021-08-08 05:38:35 字數 1174 閱讀 7169

ac自動機上的最短路問題,題目要求所經過結點公升序,且規定某些線路是不合法的,對應於ac自動機上的非法狀態。

這道題目大部分題解是用dp來做的,而我是用dijstra變形來解決這個題目的(同上篇文章)。

做了好幾天的ac自動機的習題,對於ac自動機還是有了一些理解,ac自動機在某個角度來看就是一張有特殊限制的圖,每個結點代表不同狀態,有不同的狀態轉移方程~~~~~

//ac自動機上跑最短路

#include #include #include #include #include #include using namespace std;

const int maxn=60;

const int maxm=1000;

double dis[maxn][maxn];

pairpoint[maxn];

struct node_t

node[maxm];

int toused;

inline void init_trie()

inline node_t* _newnode()

inline void insert(int k)

loc->flag=true;

}void build_ac(int n)

}while(!que.empty())}}

}struct info

bool operator < (const info& r)const

};node_t *linker[maxm][maxn];

double disk[maxn][maxm];

void bfs(int n)

else

while(!que.empty())

for(int i=u+1;i<=n;i++)}}

printf("can not be reached!\n");

}inline double dist(int i,int j)

int main()

build_ac(n);

for(int i=0;ison[j]==null) loc=loc->fail;

loc=loc?loc->son[j]:node;

linker[i][j]=loc;

}bfs(n);

}return 0;

}

小明系列故事 買年貨(HDU)

題意理解 有n個可以買的年貨,每個年貨有單價,抵扣的積分和實際的價值,小明手裡有v1的錢,v2的積分,可免費的年貨數量k。問如何買才能使年貨總的價值最大?問題分析 多維01揹包問題,用dp。動態規劃要找狀態,然後找狀態轉移方程。對於本題,狀態是dp ii jj kk ll 表示前ii個年貨花了jj錢...

HDU 4528 小明系列故事 捉迷藏

小明的媽媽生了三個孩子,老大叫大明,老二叫二明,老三.老三自然就叫小明了。一天,小明的媽媽帶小明兄弟三人去公園玩耍,公園裡面樹木很多,有很多地方可以藏身,於是他們決定玩捉迷藏。經過幾輪的猜拳後,第一輪是小明來找其他兩個人,遊戲規則很簡單 只要小明可以在規定的時間內找到他們就算小明獲勝,並且被發現的兩...

HDU 4501 小明系列故事 買年貨

解題思路 三維揹包,設定dp i j k 代表有i塊錢,有j個積分和k個免費物品的時候,可以得到的最大價值。則對於當前物品,我有兩種選擇 第一種 不買 第二種 買 如果選擇買又分了三種情況,1.用錢買。dp i 錢 j k 價值 2.用積分買。dp i j 積分 k 價值 3.免費拿。dp i j ...