hdu 5067 状态dp
2014-10-18 21:55
183 查看
题意:给定不超过10个大于0的石堆,求所有石堆搬到原点的最短时间。挖掘机可以载无限大的重量。
分析:用状态dp,dp[i][j]表示状态i中的第j个为1的点,j为最后一个搬石头的点,然后枚举i中不同于j的点k,
dp[i][j]=min(dp[i][j],dp[i-(1<<j)][k]+abs(p[j].x-p[k].x)+abs(p[j].y-p[j].k));
初始化时dp[i][j]=INT_MAX;
当i中只有一个1时,特殊考虑。
求最终结果时,枚举最后一个搬的石堆时还要加上到原点的坐标值,再取最小值。
分析:用状态dp,dp[i][j]表示状态i中的第j个为1的点,j为最后一个搬石头的点,然后枚举i中不同于j的点k,
dp[i][j]=min(dp[i][j],dp[i-(1<<j)][k]+abs(p[j].x-p[k].x)+abs(p[j].y-p[j].k));
初始化时dp[i][j]=INT_MAX;
当i中只有一个1时,特殊考虑。
求最终结果时,枚举最后一个搬的石堆时还要加上到原点的坐标值,再取最小值。
#include<cstdio> #include<iostream> #include<cmath> #include<climits> #include<algorithm> using namespace std; struct node { int x,y; }; node p[20]; const int MAX=1<<10; int a[MAX],dp[MAX][15]; int main() { int n,m,i,j,data,cnt,all,k,tmp,mina; //freopen("in.txt","r",stdin); for(i=0; i<MAX; i++) for(j=0; j<10; j++) if(i&(1<<j)) a[i]++;//计算i中1的个数。 while(scanf("%d%d",&n,&m)!=EOF) { for(cnt=i=0; i<n; i++) for(j=0; j<m; j++) { scanf("%d",&data); if(data) //获取并保存非0点。 { p[cnt].x=i; p[cnt].y=j; cnt++; } } all=1<<cnt; for(i=1; i<all; i++) if(a[i]==1)//特殊考虑只有1堆的情形。 { for(k=0; k<cnt; k++) if(i&(1<<k)) { dp[i][k]=p[k].x+p[k].y; break; } } else for(j=0; j<cnt; j++) { if(i&(1<<j)) for(dp[i][j]=INT_MAX,k=0; k<cnt; k++) if((i&(1<<k))&&k!=j) { if(dp[i][j]>(tmp=dp[i-(1<<j)][k]+abs(p[k].x-p[j].x)+abs(p[k].y-p[j].y))) dp[i][j]=tmp; } } if(cnt) { for(mina=INT_MAX,i=0; i<cnt; i++) if(mina>(tmp=dp[all-1][i]+p[i].x+p[i].y)) mina=tmp; } else mina=0; printf("%d\n",mina); } }
相关文章推荐
- HDU 5067 Harry And Dig Machine 状态压缩 DP
- hdu 5067 Harry And Dig Machine(状态压缩dp)
- HDU 5067 (状态压缩DP+TSP)
- hdu 5067 Harry And Dig Machine (状态压缩dp)
- hdu-5067(状态压缩dp)
- hdu 5067(状态压缩dp)
- hdu 5067 Harry And Dig Machine (状态压缩dp)
- HDU 3811 DP状态压缩
- HDU 3920 Clear All of Them I 状态压缩DP 2011 Multi-University Training Contest 9 - Host by BJTU
- hdu 3001 Travelling//状态压缩DP
- hdu 4336 dp求期望(状态压缩)
- HDU-1556 方格取数(1) 状态压缩+dp
- HDU 3001 Travelling 【状态压缩DP】
- HDU_3828 A + B problem 状态dp
- hdu 4317 Unfair Nim(状态压缩DP)——2012 Multi-University Training Contest 2
- hdu 4317 Unfair Nim (状态压缩DP) 【2012 Multi-University Training Contest 2】
- hdu 3811 用状态压缩DP 解决看似组合数学的题目
- hdu 1074 DFS+状态压缩DP
- hdu 2167 Pebbles 状态dp
- hdu 1565 状态压缩DP