hdu 4862解題報告

2021-06-23 03:59:02 字數 1250 閱讀 9188

看完題寫了個暴搜,果斷t了..dp的話複雜度太高了,只能用網路流求解

仔細分析是乙個費用流的模型,把費用取負就可以用最小費用流來跑了

費用流中的每條流就對應每次無限制的jump,按規則連好邊

關鍵問題就是如何讓所有點都被訪問一次:拆點後設流量為1,費用為-10*10*10(不可能達到的能量)

還有就是設兩個超級原點s和s',讓s和s'直接的流量為k,費用為0,再讓s'連向所有結點的入點(保證最多有k條流)

最後是費用流演算法...開始上的zkw,跑不出正解...換了個spfa暴力費用流居然直接過了(好像zkw不能處理負cost的?)

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

const int maxm=20000;

const int maxn=10*10*10;

const int inf=0x3f3f3f3f;

const int ddd=10*10*10;

const int s=0,t=1;

int n,m,k;

int nn;

char arr[11][11];

struct edge

;edge edge[maxm];

int box[maxn];

int ent;

void _add(int f,int t,int cap,int cost)

void add(int f,int t,int cap,int cost)

int getp(int x,int y)

int in[maxn];

int dis[maxn];

int from[maxn];

queueque;

bool spfa(int f,int t)}}

in[now]=0;

}if(dis[t]==inf) return 0;

return dis[t];

}int fyl(int f,int t)

cost+=dis[t]*mincap;

}return cost;

}void buildmap()

{ ent=0;

memset(box,-1,sizeof(box));

nn=n*m*2+5;

int ss=n*m*2+4;

add(s,ss,k,0);

for(int i=0; i>arr[i][j];

if(k

hdu3790解題報告

這裡起點和終點都是確定的,唯一有點小麻煩 也算不上什麼麻煩 就是這裡的權值有兩個,錢和路長,題目要求選擇最短路,對於一樣長度的路選擇錢最少的路.那麼我們每次就對路長鬆弛,對於路長一樣的在對錢鬆弛.不懂鬆弛操作的很抱歉 ac 840k 109ms include includeusing namesp...

hdu2647解題報告

題意 有個工廠的老闆給工人發獎金,每人基礎都是888,工人們有自己的想法,如 a 工人想要比 b 工人的獎金高,老闆想要使花的錢最少 那麼就可以 給b 888,給a 889 但是如果在此基礎上,b也想比a高,那麼就不能讓他們滿意,輸出 1 分析,根據題意可以得出乙個拓撲的關係,比如 一組資料 4 4...

hdu1080解題報告

後考研刷題時代正式開始,之前練dp意猶未盡,所以先拿dp題開刀,而且找了一道跟我原專業相關的題,基因序列匹配 當年學生物資訊學在書上看到了dna序列匹配的動態規劃演算法,現在終於實現了它 其實就是最長公共子串行lcs的變形題,ac 如下 include include define inf 9999...