POJ 3265 Problem Solving
来源:互联网 发布:无人机 拼接软件 编辑:程序博客网 时间:2024/05/21 17:38
题意:P个问题,雇佣相同的人去解决,每个人每月解决一道题,每个人解决问题的代价都分两次,解决问题当月给a[i],事后第二月给b[i],然后每个月有m的钱,问最快多久解决所有问题。(问题必须按照序号一个个解决)
题解:dp[i][j][k]代表第i个月解决完前j件事还剩k元钱所需要在下一个月支付的最小价格,由于空间比较大,所以用交叉dp的方法去更新。
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int P=305,M=1005,inf=0x3f3f3f3f;int dp[2][P][M];int a[P],b[P];int main(){ int m,p,ans=inf,x,y; scanf("%d%d",&m,&p); for(int i=1;i<=p;i++) scanf("%d%d",&a[i],&b[i]); memset(dp,0x3f,sizeof(dp)); dp[1][0][0]=0; x=0,y=1; for(int i=1;;i++) { x=i&1; y=x^1; memset(dp[y],0x3f,sizeof(dp[y])); for(int j=0;j<=p;j++) { for(int k=0;k<=m;k++) { if(dp[x][j][k]!=inf) { if(j==p) ans=min(ans,(dp[x][j][k]==0)?i:(i+1)); else if(k>=a[j+1]&&dp[x][j][k]+b[j+1]<=m) dp[x][j+1][k-a[j+1]]=min(dp[x][j+1][k-a[j+1]],dp[x][j][k]+b[j+1]); dp[y][j][m-dp[x][j][k]]=0; } } } if(ans!=inf) break; } printf("%d\n",ans); return 0;}
- POJ 3265 Problem Solving
- poj 3265 Problem Solving dp
- Problem Solving
- POJ - 3265/USACO - Jan07 Gold Problem Solving 动态规划(DP) | 对USACO官方题解0ms程序的解释
- Problem Solving Techniques
- Large-Scale Problem Solving
- Python : Problem Solving
- poj3265(Problem Solving) dp
- Problem-Solving Strategies
- [POJ3265]Problem Solving
- 【索引】General Problem Solving Techniques
- button auto submit problem solving
- 【索引】General Problem Solving Techniques
- Data Structures & Problem Solving with C++
- Data Abstraction and Problem solving with Java
- Java, Java, Java, Object-Oriented Problem Solving
- Art of Problem Solving: Proof without Words
- UVa Volume 1. Elementary Problem Solving :: String
- 在SQL中使用PL/SQL函数存在的问题
- MySQL全连接(Full Join)实现
- WPF 3D:使用变换中的TranslateTransform3D
- 获取局域网目的主机mac
- 下载rpm包的好网站
- POJ 3265 Problem Solving
- chrome 课程评优代码
- 关于虚拟机vmware安装centos时实现与windows文件共享
- Linux 学习笔记
- MySQL删除某个database的所有数据表 -好东西保存一下
- CRichEditCtrl使用CHARFORMAT结构设置字体
- 在linux环境下oracle上下键的设置
- 使用系统iso镜像配置yum源
- Hibernate映射解析——七种映射关系