分析:看了题后没别的思路,感觉就是dp,普通dp的话状态和方程实在是不好设计,观察数据,发现N非常小,暗示了这道题要用状压dp来做.

先枚举每个集合,再用O(n^2)的暴力看这个集合内有多少个冲突,如果冲突数量不大于k,那么就可以分成1个集合了,否则一定要分成多个集合,那么枚举它的子集j,状态转移方程就出来了:f[i] = min{f[j] + f[i ^ j]} j是i的子集.

以后没思路要多往dp上面去想,还要注意看数据范围,有一个值特别小就很有可能是状压dp.

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; const int inf = 0x7fffffff;
int n, m, k,a[][],f[]; int main()
{
scanf("%d%d%d", &n, &m, &k);
for (int i = ; i < ( << n); i++)
f[i] = inf;
for (int i = ; i <= m; i++)
{
int x, y;
scanf("%d%d", &x, &y);
a[x][y] = a[y][x] = ;
}
for (int i = ; i < ( << n); i++)
{
int cnt = ;
for (int j = ; j <= n; j++)
for (int l = j + ; l <= n; l++)
if (a[j][l] && (i & ( << (j - )) && (i & ( << (l - )))))
cnt++;
if (cnt <= k)
f[i] = ;
else
{
for (int j = i; j; j = (j - ) & i)
f[i] = min(f[i], f[j] + f[i ^ j]);
}
}
printf("%d\n", f[( << n) - ]); return ;
}

最新文章

  1. javascript数组去重的两个方法
  2. 数组Arrays
  3. Delphi函数参数传递 默认参数(传值)、var(穿址)、out(输出)、const(常数)四类
  4. [转载] c++ cout 格式化输出浮点数、整数及格方法
  5. 1890. Money out of Thin Air(线段树 dfs转换区间)
  6. C语言调用汇编实现字符串对换
  7. arc engine - IName
  8. 【Python】Coding the Matrix:Week 5 Perspective Lab
  9. iframe滚动条问题:显示/隐藏滚动条
  10. js--面向对象继承
  11. ABP module-zero +AdminLTE+Bootstrap Table+jQuery权限管理系统第十六节--SignalR与ABP框架Abp.Web.SignalR及扩展
  12. “卷积神经网络(Convolutional Neural Network,CNN)”之问
  13. 有时候eclipse 导入maven项目 启动的时候回出现这样一个问题
  14. python目录和文件的列表清单
  15. WebForm - cookie赋值乱码问题
  16. [转]webMethods公司简介
  17. MVC的JavaScriptResult使用
  18. EM算法及其推广
  19. C 枚举 相同的值
  20. Gtest创建第一个测试

热门文章

  1. bzoj Strange Way to Express Integers【excrt】
  2. [App Store Connect帮助]六、测试 Beta 版本(4.2) 管理 Beta 版构建版本:查看构建版本状态和指标
  3. 源码阅读之HashMap(JDK8)
  4. DB 集中管理之探讨
  5. 400 Nth Digit 第N个数字
  6. 234 Palindrome Linked List 回文链表
  7. 附加数据库错误代码 - 950【MSSQL】
  8. ASP.NET中的&lt;%%&gt;介绍
  9. struts2之通配符映射
  10. 安卓app测试之启动时间和电量监控