Gym100340 线性dp
//看题解写的 https://blog.csdn.net/sdfzyhx/article/details/51804748
#include<bits/stdc++.h>
using namespace std;
#define ll long long struct node{
int id,g;
bool operator<(const node a)const{
return g>a.g;
}
}g[];
int n,m,b[][],pre[][];
ll sum[],dp[][]; int main(){
freopen("cookies.in","r",stdin);
freopen("cookies.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d",&g[i].g),g[i].id=i;
sort(g+,g++n);//降序排列
for(int i=;i<=n;i++)sum[i]=sum[i-]+g[i].g;
memset(dp,0x3f,sizeof dp);
dp[][]=;
for(int i=;i<=n;i++)
for(int j=i;j<=m;j++){
dp[i][j]=dp[i][j-i];
for(int k=;k<=i;k++){
if(dp[i][j]>dp[i-k][j-k]+(sum[i]-sum[i-k])*(i-k)){//是保留原状态更优还是k-i区间都发一块饼干的状态更优
dp[i][j]=dp[i-k][j-k]+(sum[i]-sum[i-k])*(i-k);
b[i][j]=;//这个状态是发了一块饼干的
pre[i][j]=i-k;//i-k+1 到 i都只发了一块饼干
}
}
}
printf("%lld\n",dp[n][m]);
int p=n,t=m,ans[]={};
while(p){
if(b[p][t]){//只发了一块饼干的状态
int x=pre[p][t];
for(int i=x+;i<=p;i++)
ans[g[i].id]++;
t-=p-x;p=x;
}
else {//第一种状态转移,1-p所有阶梯都下降1
for(int i=;i<=p;i++)ans[g[i].id]++;
t-=p;
}
}
for(int i=;i<=n;i++) printf("%d ",ans[i]);
}
Gym100340 线性dp的更多相关文章
- LightOJ1044 Palindrome Partitioning(区间DP+线性DP)
		问题问的是最少可以把一个字符串分成几段,使每段都是回文串. 一开始想直接区间DP,dp[i][j]表示子串[i,j]的答案,不过字符串长度1000,100W个状态,一个状态从多个状态转移来的,转移的时 ... 
- Codeforces 176B (线性DP+字符串)
		题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=28214 题目大意:源串有如下变形:每次将串切为两半,位置颠倒形成 ... 
- hdu1712 线性dp
		//Accepted 400 KB 109 ms //dp线性 //dp[i][j]=max(dp[i-1][k]+a[i][j-k]) //在前i门课上花j天得到的最大分数,等于max(在前i-1门 ... 
- 动态规划——线性dp
		我们在解决一些线性区间上的最优化问题的时候,往往也能够利用到动态规划的思想,这种问题可以叫做线性dp.在这篇文章中,我们将讨论有关线性dp的一些问题. 在有关线性dp问题中,有着几个比较经典而基础的模 ... 
- POJ 2479-Maximum sum(线性dp)
		Maximum sum Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 33918 Accepted: 10504 Des ... 
- poj 1050 To the Max(线性dp)
		题目链接:http://poj.org/problem?id=1050 思路分析: 该题目为经典的最大子矩阵和问题,属于线性dp问题:最大子矩阵为最大连续子段和的推广情况,最大连续子段和为一维问题,而 ... 
- nyoj44 子串和 线性DP
		线性DP经典题. dp[i]表示以i为结尾最大连续和,状态转移方程dp[i] = max (a[i] , dp[i - 1] + a[i]) AC代码: #include<cstdio> ... 
- 『最大M子段和 线性DP』
		最大M子段和(51nod 1052) Description N个整数组成的序列a[1],a[2],a[3],-,a[n],将这N个数划分为互不相交的M个子段,并且这M个子段的和是最大的.如果M &g ... 
- 『最长等差数列 线性DP』
		最长等差数列(51nod 1055) Description N个不同的正整数,找出由这些数组成的最长的等差数列. 例如:1 3 5 6 8 9 10 12 13 14 等差子数列包括(仅包括两项的不 ... 
随机推荐
- 2018acm-icpc宁夏邀请赛后记
			由于要准备期末考试的缘故,时隔一个月之后我才想起来还有一场比赛没有总结. 大概是出去过的最远的地方了,宁夏理工学院离杭州有两千多千米. 不得不说感到了主办方满满的诚意,虽然是第一次办比赛,但是第一天组 ... 
- Hadoop生态圈-基于yum源的方式部署Cloudera Manager5.15.1
			Hadoop生态圈-基于yum源的方式部署Cloudera Manager5.15.1 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我之前分享过关于离线方式部署Cloudera ... 
- Java基础-考察JVM内部结构的常用工具介绍
			Java基础-考察JVM内部结构的常用工具介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们可以通过jvisualvm.exe考察jvm内部结构.而jvisualvm.exe ... 
- unity2D动画和图片切割
			视频地址: http://www.tudou.com/listplay/siFwDsllSEM.html 恩,我得到了素材,是这样的 这是一整张的图片,png格式的.很明显,这是类似于一个帧动画之 ... 
- SqlServer中的临时表
			一.什么是临时表 临时表属于会话级的,会话结束的时候,临时表被释放,其创建.使用.删除都和普通表一样,临时表空间一般利用虚拟内存,不必进行磁盘I/O,因此效率较高..临时表有两种:普通临时表 (#Tb ... 
- UVALive 7143 Room Assignment(组合数学+DP)
			题目链接 参考自:http://www.cnblogs.com/oyking/p/4508260.html 题意 n个人,其中有k对双胞胎.现有m间房间,每间房间有容量ci问分配房间的方案数. 分析 ... 
- Docker 入门 第五部分:Stacks
			目录 Docker 入门 第五部分:Stacks 先决条件 介绍 添加一个新的服务并重新部署 保存数据 回顾 Docker 入门 第五部分:Stacks 先决条件 安装 Docker 1.13 或更高 ... 
- 02-里氏替换原则(LSP)
			1. 背景 有一个功能p1,由类A完成,现在需要将功能p1进行扩展,扩展后的功能为p3,p3由原功能p1和新功能p2组成,而新功能p3和p2均由类A的子类B来完成,子类B在完成新功能p2的同时,可能会 ... 
- windows上使用mkdocs搭建静态博客
			windows上使用mkdocs搭建静态博客 之前尝试过用HEXO搭建静态博客,最近发现有个叫mkdocs的开源项目也是搭建静态博客的好选择,而且它支持markdown格式,下面简要介绍一下mkdoc ... 
- C# 修改编译版本的方法
