c++ - Bitmask - SPOJ LINEUP 错误答案

标签 c++ algorithm bit bitmask

我对这个任务有疑问。 http://www.spoj.com/problems/LINEUP/看起来很简单,但我的解决方案失败了。我得到错误的结果。 任何人都可以帮忙弄清楚吗?非常感谢您的帮助。 :-)

#include <cstdio>
#include <string.h>
using namespace std;

int n;
int prob[21][21];

char vec_rijesio[1<<13];
int memo[1<<13];
int rijesi( int d, int s ) {
   if ( d == 11 )
     {
       return 0;
     }
   if ( vec_rijesio[s] ) return memo[s];
   vec_rijesio[s] = 1;
   int &ret = memo[s];
   ret = 0;

   for ( int i=0; i<11; ++i )
      if ( ( s & (1<<i) ) == 0 ) {
         int tmp = prob[d][i] + rijesi(d + 1, s|(1<<i));
         if ( tmp > ret ) ret = tmp;
      }

   return ret;
}

int main() {
   scanf( "%d", &n );
   for(int o=0;o<n;++o)
   {
   for ( int i=0; i<11; ++i )
      for ( int j=0; j<11; ++j ) {
         int x;
         scanf( "%d", &x );
         prob[i][j] = x;
      }

   int ret = rijesi( 0, 0 );
   printf( "%d\n", ret);
   memset (memo,0,sizeof(memo));
   memset (vec_rijesio,0,sizeof(vec_rijesio));
   }
   return 0;
}

最佳答案

问题是分配问题。只需使用匈牙利算法否定优势并最小化总弱点。你可以谷歌它。

零强度会变成非常高的正弱点。

关于c++ - Bitmask - SPOJ LINEUP 错误答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19611107/

相关文章:

python - 一种拆分串联名称的算法

c++ - 影响数字比较的双粒度c++

c - 什么是异或和?

c++ - 如何更改表面调色板颜色?

不为右值引用调用 C++ move 构造函数

c++ - 如何找到社交网络实体之间的连接类型

c++ - 使用 extern "C"在 C++ 程序中包含 header 时出错

python - 设置掩护或击球设置; Numpy,构成全套的最少元素组合

algorithm - 我应该如何格式化数字签名?

java - 在 Java 中设置自定义二进制数据消息的最简单方法是什么?