/*
* 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...