joj 2526: medic
2011-03-01 13:54
435 查看
http://acm.jlu.edu.cn/joj/showproblem.php?pid=2526
最基本的0-1背包问题
动态规划 2维解法 (因为数组开错 导致wa 所以贴出来警示自己)
一维解法
最基本的0-1背包问题
动态规划 2维解法 (因为数组开错 导致wa 所以贴出来警示自己)
#include<stdio.h> #include<iostream> using namespace std; #define T 1005 #define M 105 int f[M][T]; int max(int a,int b){ if(a>=b) return a; return b; } int main(){ int size,m; int t[T],w[T]; int i,j,ans; while(scanf("%d%d",&size,&m)!=EOF){ for(i=1;i<=m;i++) cin>>t[i]>>w[i]; for(i=0;i<=size;i++) f[0][i]=0; for(i=1;i<=m;i++) for(j=0;j<=size;j++){ if(i==1) f[i][j]=0; else f[i][j]=f[i-1][j]; if(j>=t[i]) f[i][j]=max(f[i-1][j],f[i-1][j-t[i]]+w[i]); } cout<<f[m][size]<<endl; } return 0; }
一维解法
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; #define T 1005 #define M 105 int f[T]; int max(int a,int b){ if(a>=b) return a; return b; } int main(){ int size,m; int t,w; int i,j; while(scanf("%d%d",&size,&m)!=EOF){ memset(f,0,sizeof(f)); for(i=1;i<=m;i++){ cin>>t>>w; for(j=size;j>=0;j--) if(j>=t) f[j]=max(f[j],f[j-t]+w); } cout<<f[size]<<endl; } return 0; }
相关文章推荐
- joj 2526 medic 动态规划
- joj 2526: medic(dp 背包 )
- 2526: medic
- joj 2526
- joj 2526
- 2526: medic
- JOJ 2391 words
- 关于JOJ 2042的启发——一种写程序计算幂函数的方法
- JOJ 1060: Time And Motion 解题报告
- joj 1197: Sum It Up
- JOJ 2442: Be efficient 线段树的做法
- joj1751
- joj 2619 Magic Train Station
- joj 1019解题报告
- joj 2575: Moveable quadrangle with three edges ()
- joj 2657 简单贪心
- joj 2735: picture 求矩形并的周长
- JOJ 1984: A Round Peg in a Ground Hole (判断点在凸多边形内)
- joj 2727 GRE 混合图欧拉路+网络流
- joj 2645