hdu6024 Building Shops(区间dp)
2024-09-27 02:37:44
https://cn.vjudge.net/problem/HDU-6024
分开考虑某一点种与不种,最后取二者的最小值。
dp[i][1] = min(dp[i-1][0], dp[i-1][1])+c[i];
dp[i][0]则是j从i-1~1递减,判断当j种是,i的最小值,然后取总的最小。
注意dp初始化为INF,以及要开long long
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#define lson l, m, rt<<1
#define rson m+1, r, rt<<1|1
#define IO ios::sync_with_stdio(false);cin.tie(0);
#define INF 1e9
typedef long long ll;
using namespace std;
int n, m;
ll dp[][];
typedef struct {
ll x, c;
}Node;
Node node[];
bool cmp(const Node a, const Node b)
{
return a.x<b.x;
}
int main()
{
while(cin >> n){
for(int i = ; i <= n; i++){
cin >> node[i].x >> node[i].c;
}
for(int i = ; i <= n; i++){
dp[i][] = INF;
dp[i][] = INF;
}
dp[][]=;dp[][]=;
sort(node+, node+n+, cmp);
for(int i = ; i <= n; i++){
dp[i][] = min(dp[i-][], dp[i-][])+node[i].c;
ll tmp = ;
for(int j = i-; j >= ; j--){
tmp += (i-j)*(node[j+].x - node[j].x);//次数*长度
dp[i][] = min(dp[i][], dp[j][]+tmp);
}
}
cout << min(dp[n][], dp[n][]) << endl;
}
return ;
}
最新文章
- js实现蛇形矩阵
- Akka-remote使用入门
- 解决使用Skia图形库时遇到的几个问题
- HttpClient, HttpClientHandler, and WebRequestHandler Explained
- c++ 顺序容器学习
- RSA加密算法原理及RES签名算法简介
- SQLAlchemy指南(tutorial)
- jQuery_easyUI 合并单元格 (DataGrid 数据表格)
- win32用GDI+加载png图片作为背景图
- DB2 HADR备库归档问题
- 第6章 Overlapped I/O, 在你身后变戏法 ---1
- CentOS7下安装Docker-Compose
- 从零认识Java Package
- Linux下使用Kickstart自动化安装平台架构
- hdu4746 Mophues (莫比乌斯进阶)
- 【LeetCode每天一题】Reverse Linked List(链表反转)
- 迁移桌面程序到MS Store(7)——APPX + Service
- C++ STL中的 Set的用法
- saltstack之crontab管理用法
- 青蛙的约会----POJ1061
热门文章
- 【loj6029】「雅礼集训 2017 Day1」市场&;&;【uoj#228】基础数据结构练习题
- Bootstrap 框架、插件
- Ubuntu16.04中nginx除80之外其他端口不能访问
- c#生成连续单号
- 001_JavaScript学习
- webstrom中如何将npm菜单调出?
- BroadcastReceiver插件化解决方案
- 【Excel】SUMIF 或用 筛选器 实现挑选含有某些字段的值,然后把这些值所对应的后面某列上的值相加
- [OC] 使用 cocoaPods 导入 AFNetworking
- 关于ugc的一点思考