BZOJ4380: [POI2015]Myjnie
来源:互联网 发布:python pack_into 编辑:程序博客网 时间:2024/06/06 05:06
因为每个人不洗车的条件是最小价格大于c[i],所以易知最后每家店的价格都是c[i]一定有一种方案使得所有人花的钱总和最大
那么就和c[i]的具体数值无关,先把它离散化
然后因为一个人决策的标准和区间的最小值有关,将c[i]引入状态定义,
定义f[i][j][c]代表
于是枚举
那么写出方程
发现仍然不太好转移,所以还要维护一个
维护了这三个后就可以DP求解了
答案就是
code:
#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<cmath>#include<ctime>#include<bitset>#include<string>#include<vector>#include<cstdio>#include<cstdlib>#include<cstring>#include<climits>#include<complex>#include<iostream>#include<algorithm>#define ll long longusing namespace std;inline void up(int &x,const int &y){if(x<y)x=y;}const int maxn = 55;const int maxm = 4100;const int maxc = 510000;struct node{ int a,b,c;}a[maxm];inline bool cmp(node x,node y){return x.b==y.b?x.a<y.a:x.b<y.b;}int f[maxn][maxn][maxm],g[maxn][maxn][maxm],h[maxn][maxm];int p[maxn][maxn][maxm],val[maxn];int C[maxm],lsh[maxc],LSH[maxm],K;int n,m;void pre(){ sort(a+1,a+m+1,cmp); sort(C+1,C+m+1); K=0; for(int i=1;i<=m;i++) if(C[i]!=C[i-1]) LSH[++K]=C[i],lsh[C[i]]=K; for(int i=1;i<=m;i++) a[i].c=lsh[a[i].c];}void search(int l,int r,int k){ if(l>r) return ; if(!g[l][r][k]) { for(int i=l;i<=r;i++) val[i]=LSH[k]; return ; } for(int i=k;i<=K;i++) if(g[l][r][k]==f[l][r][i]) { const int pos=p[l][r][i]; val[pos]=LSH[i]; search(l,pos-1,i); search(pos+1,r,i); break; }}int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) scanf("%d%d%d",&a[i].a,&a[i].b,&a[i].c),C[i]=a[i].c; pre(); for(int l=n;l>=1;l--) for(int r=l;r<=n;r++) { for(int i=l;i<=r;i++) for(int j=1;j<=K;j++) h[i][j]=0; for(int i=1;i<=m&&a[i].b<=r;i++) { if(a[i].a<l) continue; for(int j=a[i].a;j<=a[i].b;j++) h[j][a[i].c]++; } for(int i=l;i<=r;i++) for(int j=K-1;j>=1;j--) h[i][j]+=h[i][j+1]; for(int i=l;i<=r;i++) { for(int j=K;j>=1;j--) { int tmp=g[l][i-1][j]+g[i+1][r][j]+h[i][j]*LSH[j]; if(f[l][r][j]<tmp) f[l][r][j]=tmp,p[l][r][j]=i; g[l][r][j]=g[l][r][j+1]>f[l][r][j]?g[l][r][j+1]:f[l][r][j]; } } } printf("%d\n",g[1][n][1]); search(1,n,1); for(int i=1;i<=n;i++) printf("%d ",val[i]); return 0;}
0 0
- 【bzoj4380】[POI2015]Myjnie
- BZOJ4380[POI2015] Myjnie
- BZOJ4380 POI2015 Myjnie
- BZOJ4380: [POI2015]Myjnie
- 【jzoj4931】【bzoj4380】【POI2015】【Myjnie】【动态规划】
- BZOJ4380: [POI2015]Myjnie(区间DP)
- bzoj 4380: [POI2015]Myjnie 动态规划
- [BZOJ 4380] POI 2015 Myjnie
- POI2015 题解
- bzoj 3747: [POI2015]Kinoman
- bzoj3747【POI2015】Kinoman
- [BZOJ3747] [POI2015]Kinoman
- 【POI2015】【BZOJ4378】Logistyka
- BZOJ 3747: [POI2015]Kinoman
- BZOJ 3748: [POI2015]Kwadraty
- BZOJ4378: [POI2015]Logistyka
- BZOJ4379: [POI2015]Modernizacja autostrady
- BZOJ4381: [POI2015]Odwiedziny
- 第六天2017/04/11(1:结构体链表基础和相关经典操作)
- 网络流-最大流
- UVa 1585 Score / 1586 Molar Mass(遍历+计数)
- Codeforces 796C 想法
- sql注入与statement和preraredstatement关联
- BZOJ4380: [POI2015]Myjnie
- URAL1991-The battle near the swamp
- magin重叠
- Windows socket编程
- hjr-SQL-SQL 常用查询语句
- hdu1516 字符串编辑距离dp
- 如何实现浏览器当前标签是否打开或切换
- jquery层次过滤选择器
- 初识.net界面程序(3)——字符提取和整数整除练习