poj 1160 Post Office(DP简单题)
来源:互联网 发布:java file 文件大小 编辑:程序博客网 时间:2024/05/21 14:41
给n个村子建p个邮局,求最佳的建设方案使得每个村子到最近的邮局的距离和最短,输出最短距离。
首先递推求出n个村子建1个邮局的最佳方案,画下图很容易理解。
再递推求解多个邮局的最佳方案,具体的看注释吧。
/*//k从1枚举到i-1就够了dp[i][j]=min(dp[i][j],dp[k][j-1]+sum[k+1][i]);这个画下图很好推出来的。sum[i][j]=sum[i][j-1]+p[j]-p[(i+j)/2];*/#include<iostream>#include<cstdio>#include<cstring>using namespace std;int sum[305][305]; //在i到j之间建一个邮局的最小消耗int p[305];int dp[305][305]; //前i个村子建j个邮局的最小消耗int main(){ int n,k; while(~scanf("%d%d",&n,&k)) { memset(dp,0x3f,sizeof(dp)); memset(sum,0,sizeof(sum)); p[0]=0; for(int i=1;i<=n;i++) { scanf("%d",&p[i]); } for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++) { sum[i][j]=sum[i][j-1]+p[j]-p[(i+j)/2]; } dp[i][1]=sum[1][i]; dp[i][i]=0; } for(int j=2;j<=k;j++) { for(int i=j+1;i<=n;i++) { for(int k=1;k<i;k++) { dp[i][j]=min(dp[i][j],dp[k][j-1]+sum[k+1][i]); } } } printf("%d\n",dp[n][k]); } return 0;}
- poj 1160 Post Office(DP简单题)
- poj 1160 Post Office(DP-简单DP)
- poj-1160 post office (dp)
- Post Office - POJ 1160 dp
- 【DP】 POJ 1160 Post Office
- POJ 1160 Post Office DP
- POJ 1160 Post Office (DP)
- poj 1160 post office------DP
- POJ 1160 Post Office (经典dp)
- POJ 1160 Post Office(DP)
- Poj-1160 Post Office(经典dp
- POJ 1160 Post Office Dp+中位数贪心
- poj 1160 Post Office (区间DP)
- poj - 1160 - Post Office(dp)
- poj 1160 Post Office(DP)
- poj 1160 Post Office(dp)
- 【DP|数学+预处理】POJ-1160 Post Office
- POJ 1160 Post Office (水DP)
- 局部刷新UITableView
- Hibernate映射不需要时间的日期
- vim快捷键
- elixir
- 解决IE6支持PNG图片透明问题
- poj 1160 Post Office(DP简单题)
- MyBatis经典入门实例
- int String互转
- POJ 2728 Desert King(最优比例生成树)
- 解决Spring MVC @ResponseBody返回中文字符串乱码问题
- IAAS云计算产品畅想-云主机产品陷阱
- Linux平台下Qt应用程序开发之Hello world
- 在textView中输入时避免键盘的遮挡
- 深入理解OpenERP的工作流(Workflow)