Code:

#include <cstdio>
#include <algorithm>
#include <cstring>
#define setIO(s) freopen(s".in","r",stdin)
#define inf (1<<22)
#define maxn 30
using namespace std;
char s[maxn][maxn];
int data[maxn][maxn],common[maxn][maxn],b[maxn][maxn],dp[inf],n,m;
int main() {
// setIO("input");
scanf("%d%d",&n,&m);
for(int i=0;i<n;++i) scanf("%s",s[i]);
for(int i=0;i<n;++i)
for(int j=0;j<m;++j)
scanf("%d",&data[i][j]);
for(int i=0;i<n;++i)
for(int j=0;j<m;++j) {
int sum=0,x=-inf;
for(int k=0;k<n;++k) {
if(s[k][j]==s[i][j]) {
sum+=data[k][j],x=max(x,data[k][j]);
common[i][j]|=(1<<k);
}
}
b[i][j]=sum-x;
}
memset(dp,0x3f,sizeof(dp)), dp[0]=0;
int re=(1<<n);
for(int i=0;i<re;++i)
for(int j=0;j<n;++j)
if((i&(1<<j))==0) {
for(int k=0;k<m;++k) {
dp[i|(1<<j)]=min(dp[i|(1<<j)], dp[i]+data[j][k]);
dp[i|common[j][k]]=min(dp[i|common[j][k]], dp[i]+b[j][k]);
}
}
printf("%d\n",dp[re-1]);
return 0;
}

  

最新文章

  1. ATPCS和AAPCS
  2. Linux Dynamic Shared Library &amp;&amp; LD Linker
  3. findByExample(Object exampleEntity)方法得到的List判断是否为空,不可用(lis != null)
  4. 如何:在 StackPanel 和 DockPanel 之间进行选择
  5. Oracle11g R2学习系列 之五回闪
  6. 远程调试weinre的使用
  7. HDU4850 构造一个长度n串,它需要随机长度4子是不相同
  8. UVA Getting in Line
  9. [DP优化方法之虚树]
  10. Docker 中的一些概念
  11. npm包管理器小节一下
  12. 007-li标签CSS水平居中垂直居中
  13. Normalize.css &amp; Reset
  14. ☆ [HDU4825] Xor Sum「最大异或和(Trie树)」
  15. leetcode23
  16. python 协程库gevent学习--源码学习(一)
  17. CUBA如何新增ServiceBean
  18. Redis上踩过的一些坑
  19. IllegalArgumentException: Unmatched braces in the pattern.
  20. [.NET开发] 浅说C#异步和同步

热门文章

  1. Chapter02 第三节 其他语句
  2. Python模块logging
  3. Quartz任务调度的测试Demo1(含有配置文件的demo)
  4. P1311选择客栈
  5. honpeyhonepy
  6. C++ delete仍可访问的问题
  7. 要了解mysql原理,还是要心里有点B树才行
  8. RSA 非对称加密算法简述
  9. Django之AJAX请求
  10. Python字符串(str)方法调用