看完題寫了個暴搜,果斷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...