HDU 3339 最短路 揹包問題

2021-06-05 19:29:59 字數 1220 閱讀 9412

/*

* hdu-3339

* mike-w

* 2012-4-14

*/#include#include#include#define max_size 128

#define q_size 256

#define total_dist_max (max_size*max_size-100)

#define inf 99999999

#define min(a,b) ((a)<(b)?(a):(b))

#define max(a,b) ((a)<(b)?(b):(a))

int p[max_size];

int f[max_size][max_size];

int dst[max_size];

int opt[max_size*max_size];

int que[q_size],qhead,qtail,qlen;

int inq[max_size];

int t,n,m;

int enque(int e)

int deque(int *e)

int spfa(void)

total_power=half_power=0;

for(i=1;i<=n;i++)

scanf("%d",p+i),total_power+=p[i];

half_power=total_power/2;

/* calculate shortest path */

spfa();

/* backpack problem */

memset(opt,0,sizeof(opt));

for(i=1;i<=n;i++)

for(j=total_dist_max;j>=dst[i];j--)

opt[j]=max(opt[j],opt[j-dst[i]]+p[i]);

min_cost=inf;

for(i=0;i<=total_dist_max;i++)

if(opt[i]>half_power)

min_cost=i,i=total_dist_max+1;

if(min_cost==inf)

puts("impossible");

else

printf("%d\n",min_cost);

} return 0;

}

HDOJ3339 最短路 01揹包

題意 給出電站之間的路徑長度和每個電站的電量,需要派出坦克去攻占電站,以控制多一半的電量 要比一半多,因為這個wa了一次 問最少走多少路徑,坦克數量足夠多,乙個坦克只能控制乙個電站。思路 用floyd求出起點 0點 到所有電站的距離,當做揹包物品的價值,然後以每個電站的發電量作為揹包物品的容量,進行...

Present 神奇 揹包 最短路

先設 p1p 1 表示最小的 pp 當 pxp x 使用了 p1p 1 次時,可以用 pxp x 次 p1p 1 替代,舉個例子,假如當前選物品的情況是 i 2n p 1 1 pii 2 n p1 1 p i 此時只要在 x 2,n x 2 n 中再選出任意乙個物品 pxp x 則 p1p 1 個p...

HDU 2544 最短路 最短路問題

解題報告 這題就是求兩個單源點之間的最小距離,屬於最短路問題,由於資料量很小,只有100,所以這題可以用弗洛伊德也可以用迪傑斯特拉,都可以過,但是用迪傑斯特拉會快一點,但用弗洛伊德的 會稍短一點,純屬裸的演算法題,這裡給出兩種演算法的 弗洛伊德演算法 1 include2 include3 incl...