[bzoj1700]: [Usaco2007 Jan]Problem Solving 解题
2015-12-22 20:33
253 查看
不能贪心!不能贪心!不能贪心!
反正有反例(有的题目月初支付款很少,月末支付款很大,和前面的题凑到一个月的话可能导致下个月写不了= =这时放后一个月,和后面的题一起开始写可能更优)
比如:
50 4
40 1
5 10
43 30
1 10
老老实实DP吧。。。f[i][j]表示在第i月过后,共解决了j道题,第i月结余(可用于下个月的月初支付)的最大值。cost0[]、cost1[]分别表示月初支付和月末支付
f[i][j]=max{m-sum(cost1[k+1]....cost1[j])},(前提是sum(cost0[k+1]....cost0[j])<=f[i-1][k]且sum(cost1[k+1]....cost1[j])<=m)。
数组滚动一下。。。时间复杂度O(P^3)
View Code
反正有反例(有的题目月初支付款很少,月末支付款很大,和前面的题凑到一个月的话可能导致下个月写不了= =这时放后一个月,和后面的题一起开始写可能更优)
比如:
50 4
40 1
5 10
43 30
1 10
老老实实DP吧。。。f[i][j]表示在第i月过后,共解决了j道题,第i月结余(可用于下个月的月初支付)的最大值。cost0[]、cost1[]分别表示月初支付和月末支付
f[i][j]=max{m-sum(cost1[k+1]....cost1[j])},(前提是sum(cost0[k+1]....cost0[j])<=f[i-1][k]且sum(cost1[k+1]....cost1[j])<=m)。
数组滚动一下。。。时间复杂度O(P^3)
#include<cstdio> #include<iostream> #include<cstring> using namespace std; const int maxn=305; int a[maxn],b[maxn],prea[maxn],preb[maxn]; short f[2][maxn]; int i,j,k,n,m,pre,now,nowrest,next,s1,s2,ans; bool flag; int ra;char rx; inline int read(){ rx=getchar();ra=0; while(rx<'0'||rx>'9')rx=getchar(); while(rx>='0'&&rx<='9')ra*=10,ra+=rx-48,rx=getchar();return ra; } int main(){ m=read();n=read(); for(i=1;i<=n;i++)a[i]=read(),b[i]=read(),prea[i]=prea[i-1]+a[i],preb[i]=preb[i-1]+b[i]; nowrest=m;ans=1; memset(f[1],255,(n+1)<<1);f[1][0]=m;pre=1;now=0; while(1){ ans++; memset(f[now],255,(n+1)<<1); for(i=0;i<=n;i++){ flag=0; for(j=i;j>=0&&preb[i]-preb[j]<=m;j--) if(prea[i]-prea[j]<=f[pre][j]){f[now][i]=m-preb[i]+preb[j];flag=1;break;} if(!flag)break; } if(i>n)break; swap(now,pre); } printf("%d\n",ans+1); return 0; }
View Code
相关文章推荐
- 前端js文件合并三种方式
- 汇编 等号伪指令 计算数组和字符串的大小
- PHImageManager
- day07 结构体 匿名结构体 结构体的初始化 访问 结构体嵌套 结构体的存储空间 结构体数组
- 了解Spring 构造注入和自动注入
- 用户空间和内核空间通讯之【Netlink 上】
- Android4.0(Phone)来电过程分析
- Android开发:使用ViewDragHelper实现抽屉拉伸效果
- 排序(6)---------归并排序(C语言实现)
- Redis 的性能幻想与残酷现实
- Redis 的性能幻想与残酷现实
- hdfs dfs
- springMVC请求参数接收方式
- Redis 的性能幻想与残酷现实
- Unity 绘制多边形
- 虚拟机的三种网络连接模式
- 建造者模式
- CALayer简单应用——带阴影的icon
- Cypress固件架构彻底解析及USB枚举
- ambari 创建集群过程中报错