hdu 1421 搬寝室【动态规划】
来源:互联网 发布:知名数据咨询公司 编辑:程序博客网 时间:2024/06/05 12:02
解题思路:
将物品按质量递增排序。
设dp[i][j]表示从前i件物品中拿走j对(j*2<=i)时最小疲劳值。
那么(1)不拿第i件,则dp[i][j]=dp[i-1][j],这个毫无疑问。(2)拿第i件物品,则第i件物品肯定和第i-1件物品一起拿最优,所以dp[i][j]=dp[i-2][j-1]+(w[i]-w[i-1])^2,即从前i-2件中拿j-1对的疲劳值加上拿了最后两件物品的疲劳值。
状态转移方程:
dp[i][j]=min(dp[i-1][j],dp[i-2][j-1]+(w[i-1]-w[i-2])*(w[i-1]-w[i-2]));
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<cmath>#include<queue>#define ll long longusing namespace std;int getint(){ int i=0,f=1;char c; for(c=getchar();(c<'0'||c>'9')&&c!='-';c=getchar()); if(c=='-')f=-1,c=getchar(); for(;c>='0'&&c<='9';c=getchar())i=(i<<3)+(i<<1)+c-'0'; return i*f;}const int N=2005;const ll INF=1e17;int n,k,a[N];ll f[N][N];ll w(int x,int y){ return 1ll*(a[y]-a[x])*(a[y]-a[x]); } int main(){ //freopen("lx.in","r",stdin); while(scanf("%d%d",&n,&k)!=EOF) { for(int i=1;i<=n;i++) scanf("%d",&a[i]); sort(a+1,a+n+1); for(int i=1;i<=n;i++) for(int j=1;j<=k;j++) f[i][j]=INF; for(int i=2;i<=n;i++) for(int j=1;j<=i/2&&j<=k;j++) f[i][j]=min(f[i-1][j],f[i-2][j-1]+w(i-1,i)); cout<<f[n][k]<<'\n'; } return 0;}
阅读全文
0 0
- HDU 1421 搬寝室(动态规划)
- HDU 1421 动态规划(DP) 搬寝室
- 动态规划 hdu 1421 搬寝室
- 动态规划---hdu--1421 搬寝室
- hdu 1421搬寝室 动态规划问题
- HDU 1421(搬寝室)动态规划
- HDU 1421 搬寝室 动态规划
- hdu 1421 搬寝室【动态规划】
- HDU 1421 搬寝室——动态规划
- HDU 1421 搬寝室——dp动态规划
- 搬寝室-动态规划
- 动态规划-搬寝室
- 1421 搬寝室 动态规划(DP)
- hduoj 1421搬寝室【动态规划】
- hdu1421搬寝室【动态规划】
- HDU1421 搬寝室 动态规划
- 动态规划--hdu1241搬寝室
- HDU--121--搬寝室(动态规划之背包问题)
- select2选中第一项无法显示问题
- Linux基本操作、命令
- 常用正则表达式
- 不同浏览器私有属性
- el为什么可以取到值栈里的数据
- hdu 1421 搬寝室【动态规划】
- mongodb 时间类型 date 时间戳等
- 用命令的方式向ftp服务器上传文件
- Oracle触发器实现插入或更新一张表数据同时插入或更新另一张表
- 【6】Python 标准库基础
- E
- mybatis like
- 不要迷信python
- Oracle 如何修改列的数据类型