import\u0020math\n\nn,\u0020m,\u0020k\u0020=\u0020map(int,\u0020input().split())\na\u0020=\u0020list(map(int,\u0020input().split()))\nc\u0020=\u0020[[0]*n\u0020for\u0020_\u0020in\u0020range(n)]\ndp\u0020=\u0020[[-math.inf]*n\u0020for\u0020_\u0020in\u0020range(1<<n)]\nres\u0020=\u00200\nsta\u0020=\u0020[]\n\ndef\u0020count(x):\n\u0020\u0020s\u0020=\u00200\n\u0020\u0020while\u0020x:\n\u0020\u0020\u0020\u0020if\u0020x\u0020&\u00201:\n\u0020\u0020\u0020\u0020\u0020\u0020s\u0020+=\u00201\n\u0020\u0020\u0020\u0020x\u0020>>=\u00201\n\u0020\u0020return\u0020s\n\nfor\u0020_\u0020in\u0020range(k):\n\u0020\u0020x,\u0020y,\u0020z\u0020=\u0020map(int,\u0020input().split())\n\u0020\u0020c[x-1][y-1]\u0020=\u0020z\n\nfor\u0020i\u0020in\u0020range(n):\n\u0020\u0020dp[0][i]\u0020=\u00200\n\u0020\u0020dp[1<<i][i]\u0020=\u0020a[i]\n\nfor\u0020i\u0020in\u0020range(1,\u0020(1<<n)):\n\u0020\u0020if\u0020count(i)\u0020==\u0020m:\n\u0020\u0020\u0020\u0020sta.append(i)\n\u0020\u0020for\u0020j\u0020in\u0020range(n):\n\u0020\u0020\u0020\u0020if\u0020not\u0020(i\u0020&\u0020(1<<j)):\n\u0020\u0020\u0020\u0020\u0020\u0020for\u0020k\u0020in\u0020range(n):\n\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020if\u0020i\u0020&\u0020(1<<k):\n\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020dp[i|(1<<j)][j]\u0020=\u0020max(dp[i|(1<<j)][j],\u0020dp[i][k]\u0020+\u0020a[j]\u0020+\u0020c[k][j])\n\nsz\u0020=\u0020len(sta)\nfor\u0020i\u0020in\u0020range(n):\n\u0020\u0020for\u0020j\u0020in\u0020range(sz):\n\u0020\u0020\u0020\u0020res\u0020=\u0020max(res,\u0020dp[sta[j]][i])\n\nprint(res)\n

C++ 代码到 Python 的转换:最大化收益的动态规划算法

原文地址: https://www.cveoy.top/t/topic/qmA1 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录