HDU 1421 搬寝室——动态规划
来源:互联网 发布:办公oa软件下载 编辑:程序博客网 时间:2024/06/07 09:18
题目链接点击打开链接
一道经典的动态规划题。个人理解为是贪心思想和动态规划相结合。在hdu课件上看到这题,便做了。
dp[i][j]表示前i个物品选j对消耗的最小体力。dp的方法就是前i 个物品是否选第i个。转移方程为
dp[i][j]=min(dp[i-1][j],dp[i-2][j-1]+(weight[i]-weight[i-1])*(weight[i]-weight[i-1]) )。
这道题真正让我WA n次的不是转移方程,而是dp数组的初始化。。。初始化init中内层for j要从1开始初始化为无穷大,dp[i][0]要初始化为0。Orz……
真是细节决定成败!!!
附上我搓的不行的AC代码
#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<iomanip>#include<algorithm>#include<cmath>using namespace std;long long dp[2500][1500],weight[2500];void Init(int n,int k){ int i,j; for(i=0;i<=n;i++) { for(j=1;j<=k;j++) dp[i][j]=0x7fffffff; } for(i=0;i<=n;i++) dp[i][0]=0;}int main(){ int n,k,i,j; while( scanf("%d%d",&n,&k)==2) { for(i=1; i<=n; i++) scanf("%lld",&weight[i]); Init(n,k); sort(weight+1,weight+n+1); for(i=2; i<=n; i++) { for(j=1; j*2<=i; j++) dp[i][j]=min(dp[i-1][j],dp[i-2][j-1] + (weight[i]-weight[i-1])*(weight[i]-weight[i-1])); } printf("%lld\n",dp[n][k]); } return 0;}
0 0
- HDU 1421 搬寝室——动态规划
- HDU 1421 搬寝室——dp动态规划
- HDU 1421 搬寝室(动态规划)
- HDU 1421 动态规划(DP) 搬寝室
- 动态规划 hdu 1421 搬寝室
- 动态规划---hdu--1421 搬寝室
- hdu 1421搬寝室 动态规划问题
- HDU 1421(搬寝室)动态规划
- HDU 1421 搬寝室 动态规划
- hdu 1421 搬寝室【动态规划】
- 搬寝室-动态规划
- 动态规划-搬寝室
- 1421 搬寝室 动态规划(DP)
- hduoj 1421搬寝室【动态规划】
- hdu1421搬寝室【动态规划】
- HDU1421 搬寝室 动态规划
- 动态规划--hdu1241搬寝室
- HDU--121--搬寝室(动态规划之背包问题)
- VB.NET连接Office Access数据库显示列表数据
- QtCreator 为应用程序设置图标
- ARC开启的情况下是否需要对GCD对象dispatch_release ?
- I - The 3n + 1 problem(2.4.2)
- mongodb 备份 还原 导出 导入
- HDU 1421 搬寝室——动态规划
- MySQL常用SQL语句
- spring 工作原理
- Cocos2d-x 3.1.1 学习日志6--30分钟了解C++11新特性
- uva10910 - Marks Distribution
- 正则表达式
- poj 2828 线段树
- JSP简单练习-省略显示长字符串
- Android开发之解析XML-SAX