[HDU1421]-搬寝室

搬寝室

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 25592    Accepted Submission(s): 8793


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
对应每组输入数据,输出数据只有一个表示他的最少的疲劳度,每个一行.
 

Sample Input
2 1 1 3
 

Sample Output
4
题目描述:每次搬两个物品都会产生一个疲劳度,它的量值可以由左右手提物品的重量差的平方决定,让你求n个物品搬k次的最小疲劳值。
解题思路:先对重量的轻重进行排序,然后得到相邻的重量差的平方,这样就成了从一个数列中求得k个不相邻的最小和,通过推理
可以获得状态转移方程dp[i][j]=min(dp[i-1][j],dp[i-2][j-1]+val[i]);如何得到这个状态转移方程的呢?
其实不难,我们假设每次dp[i][j]都是表示的是前i个中搬完j个最小疲劳度,每次我加进来一个val,我们就判断一下,
dp[i-1][j](不要这个val,即之前i-1状态的搬j个物品最优的疲劳值),dp[i-2][j-1](用i-2状态的搬j-1个物品的最优的疲
劳值,保证了相邻的要求)+val[i],只要从其中选一个最小的值,作为当前i状态下搬j个物品的疲劳值是最优的疲劳值)
/*http://poj.org/problem?id=2251*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <string>
#define INF 0x3f3f3f3f
#define eps 1e-8
#define MAXN (1000+10)
#define MAXM (200000+10)
#define MAXX(a,b) (a)>(b)?(a):(b)
#define MINN(a,b) (a)<(b)?(a):(b)
#define Rwi(a,b) scanf("%d%d", &a,&b)
#define Ri(a) scanf("%d", &a)
#define Rwl(a,b) scanf("%lld%lld", &a,&b)
#define Rl(a) scanf("%lld", &a)
#define Rwf(a,b) scanf("%lf%lf", &a,&b)
#define Rf(a) scanf("%lf", &a)
#define Rs(a) scanf("%s", a)
#define Pi(a) printf("%d\n", (a))
#define Pf(a) printf("%.2lf\n", (a))
#define Pl(a) printf("%lld\n", (a))
#define Ps(a) printf("%s\n", (a))
#define W(a) while((a)--)
#define CLR(a, b) memset(a, (b), sizeof(a))
#define MOD 1000000007
#define LL long long
#define lson o<<1, l, mid
#define rson o<<1|1, mid+1, r
#define ll o<<1
#define rr o<<1|1
#define PI acos(-1.0)
using namespace std;
int n,k;
int weight[MAXM];
int val[MAXM*2];
int dp[MAXN*2][MAXN];//dp[i][j]表示的是前i个中搬完j个最小疲劳度
int main()
{
	// freopen("data1421.in","r",stdin);
	while(~Rwi(n,k))
	{
		CLR(val,INF);
		for(int i = 1;i <= n;++ i)
			Ri(weight[i]);
		sort(weight,weight+n+1);
		for(int i = 1;i <= n;++ i)//求得相邻两个数的平方和
			val[i]=(weight[i]-weight[i-1])*(weight[i]-weight[i-1]);
		CLR(dp,INF);//初始化
		for (int i = 0; i <= n; ++i)//特殊值,没有搬的时候没有疲劳值
			dp[i][0] = 0;
		for(int i = 2;i <= n;++ i)
			for(int j = 1;j <= i/2;++ j)
				dp[i][j] = MINN(dp[i-2][j-1]+val[i],dp[i-1][j]);//当前的dp[i][j]可以由dp[i-1][j]或者
		Pi(dp[n][k]);						<span style="white-space:pre">	</span>//dp[i-2][j-1]+val[i];
	}
	return 0;
}



内容概要:本文设计了一种基于PLC的全自动洗衣机控制系统内容概要:本文设计了一种,采用三菱FX基于PLC的全自动洗衣机控制系统,采用3U-32MT型PLC作为三菱FX3U核心控制器,替代传统继-32MT电器控制方式,提升了型PLC作为系统的稳定性与自动化核心控制器,替代水平。系统具备传统继电器控制方式高/低水,实现洗衣机工作位选择、柔和过程的自动化控制/标准洗衣模式切换。系统具备高、暂停加衣、低水位选择、手动脱水及和柔和、标准两种蜂鸣提示等功能洗衣模式,支持,通过GX Works2软件编写梯形图程序,实现进洗衣过程中暂停添加水、洗涤、排水衣物,并增加了手动脱水功能和、脱水等工序蜂鸣器提示的自动循环控制功能,提升了使用的,并引入MCGS组便捷性与灵活性态软件实现人机交互界面监控。控制系统通过GX。硬件设计包括 Works2软件进行主电路、PLC接梯形图编程线与关键元,完成了启动、进水器件选型,软件、正反转洗涤部分完成I/O分配、排水、脱、逻辑流程规划水等工序的逻辑及各功能模块梯设计,并实现了大形图编程。循环与小循环的嵌; 适合人群:自动化套控制流程。此外、电气工程及相关,还利用MCGS组态软件构建专业本科学生,具备PL了人机交互C基础知识和梯界面,实现对洗衣机形图编程能力的运行状态的监控与操作。整体设计涵盖了初级工程技术人员。硬件选型、; 使用场景及目标:I/O分配、电路接线、程序逻辑设计及组①掌握PLC在态监控等多个方面家电自动化控制中的应用方法;②学习,体现了PLC在工业自动化控制中的高效全自动洗衣机控制系统的性与可靠性。;软硬件设计流程 适合人群:电气;③实践工程、自动化及相关MCGS组态软件与PLC的专业的本科生、初级通信与联调工程技术人员以及从事;④完成PLC控制系统开发毕业设计或工业的学习者;具备控制类项目开发参考一定PLC基础知识。; 阅读和梯形图建议:建议结合三菱编程能力的人员GX Works2仿真更为适宜。; 使用场景及目标:①应用于环境与MCGS组态平台进行程序高校毕业设计或调试与运行验证课程项目,帮助学生掌握PLC控制系统的设计,重点关注I/O分配逻辑、梯形图与实现方法;②为工业自动化领域互锁机制及循环控制结构的设计中类似家电控制系统的开发提供参考方案;③思路,深入理解PL通过实际案例理解C在实际工程项目PLC在电机中的应用全过程。控制、时间循环、互锁保护、手动干预等方面的应用逻辑。; 阅读建议:建议结合三菱GX Works2编程软件和MCGS组态软件同步实践,重点理解梯形图程序中各环节的时序逻辑与互锁机制,关注I/O分配与硬件接线的对应关系,并尝试在仿真环境中调试程序以加深对全自动洗衣机控制流程的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值