XTU 1206 Dormitory's Elevator
来源:互联网 发布:linux vi创建c文件 编辑:程序博客网 时间:2024/06/05 18:17
题意:一个电梯只能上升而且不能在连续的2层停止,每个人上和下一层,分别花费体力值为a,b,问满足所需人的需求花费的最小体力值是多少?
思路:dp,电梯肯定是停的越多越好,dpi表示的是在第i层停止后使所有顾客都满足的最小花费,那么上一次停止的位置只可能是i-2或者是i-3,然后使得这中间的楼层的人都满足,讨论2*2就ok了!
#include<bits/stdc++.h>using namespace std;#define ll long longconst int inf=0x7f7f7f7f;const int maxn=1e5+10;int n,m,num[maxn],a,b,dp[maxn];int main(){ int t;cin>>t;int k;int count=1; while(t--){ memset(num,0,sizeof(num)); memset(dp,inf,sizeof(dp)); scanf("%d%d%d%d",&n,&m,&a,&b); for(int i=1;i<=m;i++){ scanf("%d",&k);num[k]++; } dp[1]=dp[2]=0; for(int i=3;i<=n;i++){ dp[i]=min(dp[i],dp[i-2]+min(num[i-1]*a,num[i-1]*b)); if(i>3){ dp[i]=min(dp[i],dp[i-3]+num[i-2]*b+num[i-1]*2*b); dp[i]=min(dp[i],dp[i-3]+num[i-2]*b+num[i-1]*a); dp[i]=min(dp[i],dp[i-3]+num[i-2]*2*a+num[i-1]*2*b); dp[i]=min(dp[i],dp[i-3]+num[i-2]*2*a+num[i-1]*a); } } printf("Case %d: ",count++); printf("%d\n",dp[n]); }}
0 0
- XTU 1206 Dormitory's Elevator
- XTU 1206 Dormitory's Elevator
- XTU 1206Dormitory's Elevator(dp)
- XTU Dormitory's Elevator(动态规划)
- XTU 1185 Bob's Problem
- XTU-1185 Bob's Problem
- XTU 1247 Robb's Problem
- XTU 1244 Estrella's Chocolate
- XTU 1245 Lisa’s Puzzle
- xtu-1140 Anti-Goldbach's Conjecture
- HDU's ACM 1008 Elevator
- Dormitory meetting.
- XTU Lisa's Puzzle 裸的字典树
- Elevator
- Elevator
- Elevator
- elevator
- Elevator
- 今天在php中把==写成了=
- hibernate,spring,struts面试题
- md5算法详解
- 深入理解Android内核设计思想——读书笔记
- 仿微信公众平台登录页面
- XTU 1206 Dormitory's Elevator
- 使用MAT查看Android内存泄露
- UVA 11014Make a Crystal
- 51nod 1066 Bash游戏
- iOS开发-数据持久化-简书
- C# 文件操作类集合(一) 路径
- linux生产服务器有关网络状态的优化措施
- 占座
- JS学习笔记:JavaScript匿名函数与闭包(closure)