hdu3339 In Action(最短路+01背包)
2012-08-16 09:56
344 查看
In Action
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2099 Accepted Submission(s): 695
[align=left]Problem Description[/align]
View Code
#include<iostream> #include<cstring> #include<cstdio> #define MAXN 101 #define MAXV 10001 #define INF 0x3fffffff using namespace std; int dis[MAXN][MAXN],d[MAXV],cost[MAXN],weight[MAXN]; void floyd(int n) { int i,j,k; for(k=0;k<=n;k++) for(i=0;i<=n;i++) for(j=0;j<=n;j++) dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]); } void ZeroOnePack(int n,int v) { int i,j; memset(d,0,sizeof(d)); for(i=1;i<=n;i++) for(j=v;j>=cost[i];j--) d[j]=max(d[j],d[j-cost[i]]+weight[i]); } int main() { #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); #endif int test,n,m,x,y,z,i; scanf("%d",&test); while(test--) { scanf("%d%d",&n,&m); for(x=0;x<=n;x++) for(y=0;y<=n;y++) dis[x][y]=dis[y][x]=(x==y?0:INF); for(i=0;i<m;i++) { scanf("%d %d %d",&x,&y,&z); if(dis[x][y]>z) dis[x][y]=dis[y][x]=z; } int sump=0; for(i=1;i<=n;i++) { scanf("%d",&weight[i]); sump+=weight[i]; } sump=(sump>>1)+1; floyd(n); bool flag=false; int sumv=0; for(i=1;i<=n;i++) { cost[i]=dis[0][i]; if(cost[i]!=INF) sumv+=cost[i]; } ZeroOnePack(n,sumv); flag=false; for(i=1;i<=sumv;i++) { if(d[i]>=sump) { printf("%d\n",i); flag=true; break; } } if(!flag) printf("impossible\n"); } return 0; }
相关文章推荐
- HDU3339 In Action(最短路+01背包)
- hdu3339In Action(最短路+01背包)
- HDU3339-In Action(最短路+01背包)
- HDU3339 - In Action - 最短路+01背包dp
- HDU3339 In Action(最短路+01背包)
- hdu3339In Action(最短路+01背包)
- hdu 3339 In Action (最短路+01背包)
- HDOJ 3339 In Action(最短路+01背包)
- HDU 3339 In Action(最短路+01背包)
- hdu 3339 In Action(最短路+01背包)
- hdoj--3339--In Action(最短路+01背包)
- In Action(最短路+01背包)
- hdoj--3339--In Action(最短路+01背包)
- hdu 3339 In Action spfa最短路+01背包
- hdu 3339 In Action(最短路+01背包)
- HDU 3339 In Action(最短路+01背包)
- HDU 3339 In Action 最短路+01背包
- HDU3339--In Action(最短路+0-1背包)
- HDU 3339 In Action 最短路+01背包~
- In Action(最短路+01背包)