积木城堡.cpp

来自「背包类问题浅析和一些背包类问题的解答源程序。」· C++ 代码 · 共 43 行

CPP
43
字号
#include <iostream>
using namespace std;

const int T = 10002, N = 109, OO = 2000000000;
int n, top=OO, a[N][N];
bool can[N][T]={0};

int main(){
    cin >>n;
    int i, j, k, s;
    for( i=1; i<=n; ++i ){
         s = j = 0;
         cin >>a[i][++j];
         while( a[i][j] != -1 ){
                s += a[i][j];
                cin >>a[i][++j];
         }
         if( s < top ) top = s;
    }
    
    for( i=1; i<=n; ++i ){
         can[i][0] = true;
         for( k=1; a[i][k]!=-1; ++k ){
              s = a[i][k];
              for( j=top; j>=s; --j )
                   can[i][j] = can[i][j] || can[i][j-s];
         }
    }
    
    for( i=top; i>=0; --i ){
         s = 1;
         for( j=n; j>0; --j )
              if( !can[j][i] ){
                  s = 0;  break;
              }
         if( s ) break;
    }
    cout <<i <<endl;

    system( "pause" );
    return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?