http://acm.hdu.edu.cn/showproblem.php?pid=2546

http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=3361

http://blog.sina.com.cn/s/blog_5123df350100e8p8.html

http://blog.sina.com.cn/s/blog_51cea4040100gvn3.html

http://blog.csdn.net/wukonwukon/article/details/6939050

搬寝室

Problem Description
搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物品,xhd开始发呆,因为n是一个小于2000的整数,实在是太多了,于是xhd决定随便搬2*k件过去就行了.但还是会很累,因为2*k也不小是一个不大于n的整数.幸运的是xhd根据多年的搬东西的经验发现每搬一次的疲劳度是和左右手的物品的重量差的平方成正比(这里补充一句,xhd每次搬两件东西,左手一件右手一件).例如xhd左手拿重量为3的物品,右手拿重量为6的物品,则他搬完这次的疲劳度为(6-3)^2 = 9.现在可怜的xhd希望知道搬完这2*k件物品后的最佳状态是怎样的(也就是最低的疲劳度),请告诉他吧.
 
Input
每组输入数据有两行,第一行有两个数n,k(2<=2*k<=n<2000).第二行有n个整数分别表示n件物品的重量(重量是一个小于2^15的正整数).
Output
对应每组输入数据,输出数据只有一个表示他的最少的疲劳度,每个一行.

先对a[]按小到大排序.设:dp[i][j]表示前 i 个物品中搬 j 对的最少疲劳度.

显然,当i==2*j时,  dp[i][j]=dp[i-2][j-1] + (a[i]-a[i-1])^2
因为,当   (a1-a2)^2+(a3-a4)^2 <=  (a1-a4)^2+(a3-a2)^2 ( a1<=a2<=a3<=a4 ).
当i>2*j时,  dp[i][j]  =  min( dp[i-1][j] , dp[i-2][j-1]+(a[i]-a[i-1])^2 )

 #include <stdio.h>
#include <string.h>
#include <stdlib.h>
int dp[][];
int a[];
int n,k;
int pow2(int a) {return a*a;}
int min2(int a,int b) {return a<b?a:b;} int cmp(const void* a,const void* b){
return *(int*)a-*(int*)b;
} int main(){
int i,j,l;
while(EOF != scanf("%d%d",&n,&k)){
for(i=;i<=n;i++)
scanf("%d",&a[i]);
qsort(a+,n,sizeof(a[]),cmp);
memset(dp,,sizeof(dp));
for(i=;i<=n;i++){
l=i/;
for(j=;j<=l;j++){
if(i==*j)
dp[i][j]=dp[i-][j-]+pow2(a[i]-a[i-]);
else
dp[i][j]=min2(dp[i-][j],dp[i-][j-]+pow2(a[i]-a[i-]));
}
}
printf("%d\n",dp[n][k]);
}
return ;
}
Problem Description
A number whose only prime factors are 2,3,5 or 7 is called a humble number.
The sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27,
... shows the first 20 humble numbers.

Write a program to find and print the nth element in this sequence

 #include <stdio.h>
int f[],n;
int i,j,k,l; int min(int a,int b,int c,int d){
int min=a;
if(b<min) min=b;
if(c<min) min=c;
if(d<min) min=d; if(a==min) i++;
if(b==min) j++;
if(c==min) k++;
if(d==min) l++; return min;
} int main(){
i=j=k=l=;
f[]=;
for(int t=;t<=;t++)
f[t]=min(*f[i],*f[j],*f[k],*f[l]); while(scanf("%d",&n)&&n!=){
if(n%==&&n%!=)
printf("The %dst humble number is %d.\n",n,f[n]);
else if(n%==&&n%!=)
printf("The %dnd humble number is %d.\n",n,f[n]);
else if(n%==&&n%!=)
printf("The %drd humble number is %d.\n",n,f[n]);
else
printf("The %dth humble number is %d.\n",n,f[n]);
}
return ;
}

【集训笔记】动态规划背包问题【HDOJ1421【HDOJ1058【HDOJ2546的更多相关文章

  1. 2017清北学堂(提高组精英班)集训笔记——动态规划Part3

    现在是晚上十二点半,好累(无奈脸),接着给各位——也是给自己,更新笔记吧~ 序列型状态划分: 经典例题:乘积最大(Luogu 1018) * 设有一个长度为 N 的数字串,要求选手使用 K 个乘号将它 ...

  2. js动态规划---背包问题

    //每种物品仅有一件,可以选择放或不放 //即f[i][w]表示前i件物品恰放入一个容量为w的背包可以获得的最大价值. //则其状态转移方程便是:f[i][w]=max{f[i-1][w],f[i-1 ...

  3. P1060 开心的金明(动态规划背包问题)

    题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NN元钱 ...

  4. leetcode笔记 动态规划在字符串匹配中的应用

    目录 leetcode笔记 动态规划在字符串匹配中的应用 0 参考文献 1. [10. Regular Expression Matching] 1.1 题目 1.2 思路 && 解题 ...

  5. 2019暑期金华集训 Day7 动态规划

    自闭集训 Day7 动态规划 LOJ6395 首先发现这个树的形态没啥用,只需要保证度数之和是\(2n-2\)且度数大于0即可. 然后设\(dp_{i,j}\)表示前\(i\)个点用了\(j\)个度数 ...

  6. 【集训笔记】动态规划【HDOJ1159【HDOJ1003

    终于开始DP了] HDOJ_1159  Common  Subsequence 题目链接 Sample Input abcfbc abfcab programming contest abcd mnp ...

  7. 动态规划-背包问题 Knapsack

    2018-03-15 13:11:12 背包问题(Knapsack problem)是一种组合优化的NP完全问题.问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何 ...

  8. 动态规划——背包问题python实现(01背包、完全背包、多重背包)

    目录 01背包问题 完全背包问题 多重背包问题 参考: 背包九讲--哔哩哔哩 背包九讲 01背包问题 01背包问题 描述: 有N件物品和一个容量为V的背包. 第i件物品的体积是vi,价值是wi. 求解 ...

  9. QDEZ集训笔记【更新中】

    这是一个绝妙的比喻,如果青岛二中的台阶上每级站一只平度一中的猫,差不多站满了吧 自己的理解 [2016-12-31] [主席树] http://www.cnblogs.com/candy99/p/61 ...

随机推荐

  1. A Byte of Python 笔记(9) 面向对象编程

    第11章  面向对象编程 面向过程:根据操作数据的函数或语句块来设计程序. 面向对象(OOP, object-oriented programming):把数据和功能结合起来,用对象包裹组织程序. 类 ...

  2. linux 命令大全

    工作了一段时间,开始整理资料,好记性不如烂笔头啊. linux命令大全下载路径: 1.http://www.pc6.com/SoftView/SoftView_28912.html 2.http:// ...

  3. 高质量程序设计指南C/C++语言——C++/C程序设计入门(2)

    *标准C规定,编译器只取前31个字符作为有效的标识符,而标准C++则取前255个字符作为有效的标识符. *把具有特殊含义的字符输出到终端上,尤其是当它们出现在普通字符串或格式控制字符串中时,一般来说有 ...

  4. IO调度算法研究1

    linux kernel 2.6之后提供了四种IO调度算法,每种调度算法都有其不同的特点和应用场景,系统使用者可以通过系统提供的接口,选择使用哪种IO调度算法,以及调整IO调度算法的参数,以达到最优的 ...

  5. Android系统智能指针的设计思路(轻量级指针、强指针、弱指针)

    本博客为原创,转载请注明出处,谢谢. 参考博文:Android系统的智能指针(轻量级指针.强指针和弱指针)的实现原理分析 C++中最容易出错的地方莫过于指针了,指针问题主要有两类,一是内存泄露,二是无 ...

  6. Java Date 和 Calendar

    Java 语言的Date(日期),Calendar(日历),DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分.日期是商业逻辑计算一个关键的部分,所有的开发者都应该能够计算 ...

  7. IPhone多视图切换

    处理IPhone多个view切换是我们常遇到的问题,接下来有个比较实用的方法: 而且还附有创建空项目,内存告急处理和动画效果的实现! 具体步骤: 1.创建一个空的项目,然后添加一个ViewContro ...

  8. hdu 1085 Holding Bin-Laden Captive! (母函数)

    //给你面值为1,2,5的三种硬币固定的数目,求不能凑出的最小钱数 //G(x)=(1+x+...+x^num1)(1+x^2+...+x^2num2)(1+x^5+,,,+x^5num3), //展 ...

  9. Java输入输出流(1)

    1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java全部的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.Java的I/O流提供了读 ...

  10. Redis初始化配置及增删改查

    package com.calc.tools import redis.clients.jedis.JedisPool import redis.clients.jedis.Jedis import ...