hdu1421 搬寝室(dp)
2016-01-28 19:56
176 查看
此题是动态规划题。
解题思路:
用w[i]存储n个物品的重量,对其进行排序。
那么当取了第i个物品,必然会取第i-1个物品。
令dp[i][j]表示前i个物品,取j对的最小疲劳度。
若取第i个物品
则:dp[i][j]=dp[i-2][j-1]+(w[i]-w[i-1])*(w[i]-w[i-1]);
若不取第i个物品
则:dp[i][j]=dp[i-1][j];
所以状态转移方程为:dp[i][j]=min(dp[i-2][j-1]+(w[i]-w[i-1])*(w[i]-w[i-1]),dp[i-1][j]);
代码:
解题思路:
用w[i]存储n个物品的重量,对其进行排序。
那么当取了第i个物品,必然会取第i-1个物品。
令dp[i][j]表示前i个物品,取j对的最小疲劳度。
若取第i个物品
则:dp[i][j]=dp[i-2][j-1]+(w[i]-w[i-1])*(w[i]-w[i-1]);
若不取第i个物品
则:dp[i][j]=dp[i-1][j];
所以状态转移方程为:dp[i][j]=min(dp[i-2][j-1]+(w[i]-w[i-1])*(w[i]-w[i-1]),dp[i-1][j]);
代码:
#include "stdio.h" #include "math.h" #include "queue" #include "stdlib.h" #include "string.h" #include "algorithm" #include "iostream" #define N 100010 #define inf 2147483646 #define eps 1e-8 #define pi acos(-1.0) using namespace std; int dp[2005][1005]; int main() { int n,k,i,j; int w[2005]; while(cin>>n>>k) { w[0]=0; for(i=1;i<=n;i++) cin>>w[i]; sort(w,w+n+1); for(i=0;i<=n;i++) for(j=1;j<=k;j++) dp[i][j]=inf; dp[0][0]=0; for(i=2;i<=n;i++) { for(j=1;j*2<=i;j++) { dp[i][j]=min(dp[i-2][j-1]+(w[i]-w[i-1])*(w[i]-w[i-1]),dp[i-1][j]); } } cout<<dp [k]<<endl; } return 0; }
相关文章推荐
- django使用gmail
- 快速掌握Lua 5.3 —— "metatables" and "metamethods" (1)
- jQuery Validate验证框架详解
- memcached Java Client
- C#读取ini文件方法,实质是使用C++的库
- Storm架构
- cocos中ProgressTimer,进度条
- HDU(1301)最小生成树
- Linux 设备驱动中的阻塞和同步机制
- 【第一行代码】Android系统架构
- Oracle基础(五):多表查询
- [android]_[初级][插入短信数据到短信数据库]
- Python之登录接口(第1天)
- ps -aux | grep 详细信息
- QT5+OpenCV美白效果
- 构造HTTP请求Header实现“伪造来源IP”
- 使用 Spring Data JPA 简化 JPA 开发
- Markdown简单实例教程
- 没记性
- 判断一个数是3的n次幂