书的复制
来源:互联网 发布:超级基因优化液大结局 编辑:程序博客网 时间:2024/05/20 12:21
这个题就是一个动归,和乘积最大一样,处理前缀和,枚举当前位置和划分层数,找最大的时间,取最小值
#include<cstdio>#include<iostream>#include<cstring>using namespace std;int a[999999],f[3999][3999],m,n,s[999999];int print(int x,int y){ if(y==0) return 0; if(y==1){ printf("1 %d\n",x); return 0; } int t=x,w=a[x]; while(w+a[t-1]<=f[m][n]){ w+=a[t-1]; t--; } print(t-1,y-1); printf("%d %d\n",t,x);}int main(){ scanf("%d%d",&n,&m); memset(f,127,sizeof(f)); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); s[i]=s[i-1]+a[i]; f[1][i]=s[i]; } for(int i=2;i<=m;i++) for(int j=1;j<=n;j++) for(int k=1;k<=j-1;k++) { if (max(f[i-1][k],s[j]-s[k])<f[i][j]) f[i][j]=max(f[i-1][k],s[j]-s[k]); } //printf("%d",f[m][n]); print(n,m);}
还可以二分,和跳石头一样
#include<cstdio> using namespace std;int m,k;int a[99999],s[99999]; int l,r;int print(int x,int y){ if(y==0) return 0; if(y==1){ printf("1 %d\n",x); return 0; } int t=x,w=a[x]; while(w+a[t-1]<=l-1){ w+=a[t-1]; t--; } print(t-1,y-1); printf("%d %d\n",t,x);}int check(int x){ int t=a[1];int ans=0;int j=0; for(int i=2;i<=m;i++) { if(t+a[i]>=x) ans++,t=a[i]; else t+=a[i]; } return ans;}int main(){ scanf("%d%d",&m,&k); for(int i=1;i<=m;i++) { scanf("%d",&a[i]); s[i]=s[i-1]+a[i]; } l=1,r=s[m]; while(l<=r){ int mid=(l+r)>>1; if(check(mid)>=k) l=mid+1; else r=mid-1; } //printf("%d",r); //printf("%d\n",check(16)); print(m,k); return 0;}
阅读全文
1 0
- 书的复制
- 书的复制
- 书的复制
- 书的复制 二分
- 书的复制
- 书的复制
- 【openjudge】书的复制
- 书的复制
- 【书的复制】解题报告
- 书的复制 二分解法
- 洛谷1281 书的复制
- 洛谷1281 书的复制
- 【原创】【BZOJ】书的复制
- [P1281]书的复制[DP]
- P1281 书的复制 dp
- [P1281]书的复制[二分]
- 洛谷P1281 书的复制
- 【基础算法】 书的复制
- java克隆对象
- Wince对数据库操作,出现 对表达式求值导致溢出。 [ Name of function (if known) = ]
- 丑数
- Android产品研发(二十五)-->MVC/MVVM/MVP简单理解
- zookeeper学习 第一章 序言
- 书的复制
- python编程基本方法之raw_input .format
- Android音视频开发进阶
- XZ_iOS之一串字符串每隔4个数字或者字符串加空格
- 计算几何-求线段交点算法和代码(C++语言)
- shell中执行没有问题的脚本,交给cron后出错,如何解决?
- 关于函数柯里化的一些理解
- 实现服务器和客户机的交互
- java连接sqlserver2016方法