HDU 2602 Bone Collector (0-1背包)
2013-04-19 22:00
375 查看
方法一: 时间N*V 空间N*V 内存开销大
方法二:时间 N*V 空间 V 内存开销小
#include<iostream> using namespace std; #define N 1005 #define V 1005 int T,n,v; int c ,w ,dp [V]; int main() { scanf("%d",&T); while(T--) { scanf("%d%d",&n,&v); for(int i=1;i<=n;i++) scanf("%d",&w[i]); for(int i=1;i<=n;i++) scanf("%d",&c[i]); memset(dp,0,sizeof(dp)); //*****核心代码 ***** for(int i=1;i<=n;i++) for(int j=0;j<=v;j++) { if(j>=c[i]) dp[i][j]=max(dp[i-1][j],dp[i-1][j-c[i]]+w[i]); else dp[i][j]=dp[i-1][j]; } printf("%d\n",dp [v]); } return 0; }
方法二:时间 N*V 空间 V 内存开销小
#include<iostream> using namespace std; #define N 1005 #define V 1005 int T,n,v; int c ,w ,dp[V]; int main() { scanf("%d",&T); while(T--) { scanf("%d%d",&n,&v); for(int i=1;i<=n;i++) scanf("%d",&w[i]); for(int i=1;i<=n;i++) scanf("%d",&c[i]); memset(dp,0,sizeof(dp));//因为不必装满.当要求必须刚好装满V时,dp[0]=0,dp[i]=-∞(i!=0). //*****核心代码 ***** for(int i=1;i<=n;i++) for(int j=v;j>=c[i];j--) dp[j]=max(dp[j],dp[j-c[i]]+w[i]); printf("%d\n",dp[v]); } return 0; }
相关文章推荐
- HDU 2602 Bone Collector(0 1背包)
- HDU 2602 Bone Collector(0-1背包模板题)
- hdu 2602 Bone Collector 01背包
- hdu 2602 (01 背包)Bone Collector
- HDU 2602 Bone Collector(01背包裸题)
- HDU 2602 Bone Collector(01背包,DP)
- HDU 2602(Bone Collector)基础0-1背包问题
- hdu 2602 Bone Collector(0/1背包)
- HDU-2602 - Bone Collector - 01背包
- hdu 2602 Bone Collector (01背包经典入门)
- hdu-2602-Bone Collector-(0-1背包)
- hdu 2602 Bone Collector(0-1背包)
- HDU 2602 Bone Collector(背包)
- hdu 2602 Bone Collector 01背包
- hdu 2602 Bone Collector (01背包 入门)
- HDU 2602 Bone Collector --01背包
- hdu2602 Bone Collector(背包问题)
- HDU 2602 Bone Collector 背包
- [HDU 2602] Bone Collector 01背包
- HDU2602_Bone Collector(背包/01背包)