#include #include #define MAXNUM 1000//最大的箱子个数 #define MAXWIGHT 3000// int n;//箱子数目 int F[MAXNUM+1][6000];//第i个箱子到第n个箱子中总重量为j的最大箱子数 int Weight[MAXNUM];//箱子重量 int Capacity[MAXNUM];//箱子所能承受的压力 int max(int ,int ); //返回两个数的最大值 int main() { int i,j,ans; printf("输入箱子的个数n(1-1000):\n");; scanf("%d",&n); printf("分别输入箱子的重量和能承受的重量(x y):\n"); for(i=1; i<=n; i++) scanf("%d %d",&Weight[i],&Capacity[i]); F[n+1][0] = 0; for(i=n; i>=1; i--) { for(j=0; j<=2*MAXWIGHT; j++) { F[i][j]=F[i+1][j]; if(j>=Weight[i]&&Capacity[i]>=j-Weight[i]) { F[i][j]=max(F[i][j],F[i+1][j-Weight[i]]+1); } } } ans=0; for(i=0; i<=6000; i++) ans = max(ans,F[1][i]); printf("最大叠放:%d",ans); return 0; } int max(int x,int y) { if(x>y) return x; else return y; }