递推-hdu-6024-Building Shops
来源:互联网 发布:最简单的数据库软件 编辑:程序博客网 时间:2024/05/21 12:48
题意:在n个教学楼上建造糖果店,如果在那里建造,那么价值就是y,否则的话,就是他到左边第一个糖果店的距离。注意:如果某一个地方没有糖果店,那么他的左边一定有糖果店,所以第一个一定有糖果店。
递推,维护最大值。
关键是 状态的转移:
当他建造时可以知道,毕竟做过之类的题。
在他不可以的时候,只能从第一个见的地方转移。但是要怎么转移呢,我想了好久这个问题,因为无法判断当前点有没有被建造,可能会出现非法的情况。
很值的思考。
#include <iostream>#include <cstdio>#include <vector>#include <cstring>#include <algorithm>/*一个递推,有下列的条件,*/using namespace std;const int maxn=3002;typedef long long ll;struct Node{ ll x; ll y;};int cmp2(Node a, Node b){ return a.x<b.x;}int main(){ int m; ll dp[maxn][2]; ll a1,b; ll ans; Node a[maxn]; while(~scanf("%d",&m)) { for(int i=1;i<=m;i++) { scanf("%lld%lld",&a1,&b); a[i].x=a1; a[i].y=b; } sort(a+1,a+m+1,cmp2); memset(dp,0x3f,sizeof(dp)); dp[0][0]=0; dp[0][1]=0; for(int i=1;i<=m;i++) { dp[i][1]=min(dp[i-1][1],dp[i-1][0])+a[i].y; ans=0; for(int j=i-1;j>=1;j--) { ans+=(i-j)*(a[j+1].x-a[j].x);//每次求他们之间的差值,如果是第二个是空的, dp[i][0]=min(dp[i][0],dp[j][1]+ans); } } ll all=min(dp[m][1],dp[m][0]); printf("%lld\n",all); }}
0 0
- 递推-hdu-6024-Building Shops
- HDU 6024 Building Shops
- HDU 6024 Building Shops[dp]
- hdu 6024 Building Shops (dp)
- HDU 6024 Building Shops【DP】
- HDU 6024 Building Shops(DP)
- HDU 6024 Building Shops(DP)
- hdu 6024 Building Shops dp
- hdu 6024 Building Shops 【递归+记忆存储】
- hdu 6024 Building Shops (DP)
- HDU 6024 Building Shops (DP)
- HDU 6024 Building Shops DP 提升
- HDU 6024 Building Shops(DP)
- HDU 6024 Building Shops (简单dp)
- HDU—6024(Building Shops)
- Building Shops HDU
- 2017CCPC女生赛 hdu 6024 Building Shops
- Building Shops
- 数据库隔离级别以及Spring事务传播
- 也许下一个倾家荡产的就是你
- C++实现迪杰斯特拉(Dijkstra)算法
- ECS ubuntu 解决错误集合整理
- NYOJ-308-Substring(第四届河南省程序设计大赛F题(简单状压dp))
- 递推-hdu-6024-Building Shops
- springmvc读取本地图片并显示
- C# 泛型约束
- canvas图像放大镜效果
- pandas中loc、iloc、ix的区别
- java浅显易懂解释return相关
- 深度学习识别汉字
- == 与 equals() 的区别
- python学籍