题意:给1个n*n矩阵,每个点上有2个整数权值w和c,现在你希望从(1,1)开始,每次只能向右或向下走(从(i,j)到(i+1,j) or (i,j+1) ),使得路径上的权值和不超过W,出现过的不同颜色数量尽可能少,求最少颜色数,及任意一条对应路径。

1≤n≤400,1≤W≤109,1≤c≤k,1≤k≤101\le n \le 400,1 \le W \le 10^9, 1 \le c \le k ,1 \le k \le 10

枚举颜色子集暴力求O(2k∗n2)O(2^k *n^2)

#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <map>
#include <functional>
#include <cstdlib>
#include <queue>
#include <stack>
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define ForkD(i,k,n) for(int i=n;i>=k;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=Pre[x];p;p=Next[p])
#define Forpiter(x) for(int &p=iter[x];p;p=Next[p])
#define Lson (o<<1)
#define Rson ((o<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,127,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define INF (500000000000LL)
#define F (100000007)
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define vi vector<int>
#define pi pair<int,int>
#define SI(a) ((a).size())
typedef long long ll;
typedef unsigned long long ull;
ll mul(ll a,ll b){return (a*b)%F;}
ll add(ll a,ll b){return (a+b)%F;}
ll sub(ll a,ll b){return (a-b+llabs(a-b)/F*F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;}
int read()
{int x=0,f=1; char ch=getchar();while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();}return x*f;
}
#define MAXN (400+10)
int p2[20];
ll f[MAXN][MAXN],g[MAXN][MAXN],g2[MAXN][MAXN];
ll W,w[MAXN][MAXN],c[MAXN][MAXN];
int n,k;
void pri(int i,int j) {if (i!=1||j!=1) {if (g2[i][j] ==1) pri(i-1,j);else pri(i,j-1);} printf("%d %d",i,j);if (i==n && j==n ) puts(""); else putchar(' ');
}
int main() {p2[0]=1; For(i,10) p2[i]=p2[i-1]<<1;cin >> n >> k >> W;For(i,n) For(j,n) cin>>w[i][j];For(i,n) For(j,n) cin>>c[i][j];ll ans=INF;For(i,n) For(j,n) c[i][j]=p2[c[i][j]-1];if (w[1][1]>W) {puts("-1"); return 0;}f[1][1]=w[1][1];Rep(mask,p2[k]) {if ( !(mask & c[1][1] )  ) continue;For(i,n) For(j,n) {if (i==1 && j==1 ) continue;f[i][j]=INF;if (i>1 && f[i-1][j] + w[i][j] < f[i][j] && (mask&c[i][j]) ) {f[i][j] =  f[i-1][j] + w[i][j] ;g[i][j]=1;}if (j>1 && f[i][j-1] + w[i][j] < f[i][j] && (mask&c[i][j]) ) {f[i][j] =  f[i][j-1] + w[i][j] ;g[i][j]=2;}}if (f[n][n] <= W && ans > __builtin_popcount(mask) ) {ans=__builtin_popcount(mask);For(i,n) For(j,n) g2[i][j]=g[i][j];}}if (ans==INF) {puts("-1"); return 0;}cout<<ans<<endl;pri(n,n);return 0;
}

ICPCCamp 2016 Day 6 - Spb SU and Spb AU Contest(Colored path-dp)相关推荐

  1. 微软2016校园招聘在线笔试 B Professor Q's Software [ 拓扑图dp ]

    传送门 题目2 : Professor Q's Software 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Professor Q develops a new s ...

  2. 安卓最酷最炫的3D桌面 SPB主题SPB Shell 3D最新版评测

    SPB主题(SPB Shell 3D)是一款可以颠覆我们手机主题的软件,它让我们可以非常真实的体验3D桌面带来的快感,如今SPB主题(SPB Shell 3D)已经在安卓平台生根发芽,成为安卓历史上最 ...

  3. CUDA、SU、MPI和Madagascar混合编程的Makefile文件配置

    本人从事地震勘探的科研工作,在Ubuntu系统中用CUDA.SU.MPI和Madagascar做C语言的混合编程.多语言混合编程,关键之处在于Makefile文件的配置.在此给出一个简单的示例,供大家 ...

  4. centos su命令

    有很多指令都只可以用 root 身份去执行,因此我们需要成为 root 用户.要这样做,我们可以使用 su 指令(更替用户).su 指令有下列格式: su - <user> 或 su &l ...

  5. LimitState.RING.v3.2.a.20141.Win32_64 2CD

    InTouch v10.1-ISO 1CD\ LEADTOOLS Vector Imaging Pro v14.0\ NEUROEXPLORER.v3.093\ Novas Verdi v2009.0 ...

  6. Android 添加背景音乐代码实现,以及创建音频文件夹

    这里给出添加三中不同的音乐的代码: package com.example.administrator.clickme;import android.content.Context; import a ...

  7. 后门制作及安装技术(全)

    后门制作及安装技术 摘要 本文将描述如何测定入侵者使用的方法这样的复杂内容和管理员如何防止入侵者重返的基础知识. (2002-09-16 13:30:19) 后门 声明:此文为翻译文章,QiangGe ...

  8. 常用CAD/CAE/CAM/CAX/EDA仿真工具下载合集。

    长期从事射频相关工作,因为平时比较喜欢收集一些工作中经常使用的仿真工具,今天稍微整理了一下,分享给大家,版本蛮全的,软件目录见下文. 因为是众多版本合集,Du盘经常抽风失效,为了方便统一更新链接,所以 ...

  9. 深度学习和几何(演讲提要)

    感恩节来临,生活节奏终于缓慢下来.纽约长岛天空一片湛蓝,艳阳高照,满地碎金.这一阶段,老顾收到很多读者来信,大多询问深度学习和最优传输理论的关系,很多问题反映出读者的深度思考和独特见解.恰逢老顾也在研 ...

  10. ECCV 2018 | Pixel2Mesh:从单帧RGB图像生成三维网格模型

    腾讯 AI Lab 与复旦大学.普林斯顿大学.Intel Labs 合作提出一种端对端的深度学习框架,可从单张彩色图片直接生成三维网格(3d mesh).该研究论文被顶级会议 ECCV 2018 收录 ...

最新文章

  1. Python 正则(1)
  2. USB无法识别原因分析及解决方案
  3. 冷热分治,DT时代的数据存储必由之路
  4. Java 技术篇 - 启动web服务接收浏览器请求并响应实例演示,解决socket响应浏览器显示中文乱码问题,web服务response响应设置浏览器显示字体方法
  5. 从 Vuex 0.6.x 迁移到 1.0
  6. Task.Run Vs Task.Factory.StartNew z
  7. linux 删除文件内容
  8. 微信WAP H5支付功能实现
  9. Java项目文件目录结构介绍
  10. HTML页面日历插件
  11. 华擎J3455-ITX黑群晖6.2.3-25426搭建
  12. bum报文_数据中心VxLAN技术概念和原理解读
  13. 计算机病毒学课本,计算机病毒及防治教案
  14. go语言实现家庭收支记账本
  15. 2016阿里在线笔试Java研发附加题
  16. windows的ping测试脚本
  17. 单价数量和总价的公式_小学数学基础公式:单价数量总价公式(十二)
  18. Hadoop2.0高可用集群搭建【保姆级教程】
  19. 商用密码应用与安全性评估之(一)网络空间安全形式与商用密码工作
  20. mysql8.0字符集排序规则_MySQL 的字符集与排序规则

热门文章

  1. 自己做的js甘特图插件
  2. Linux command – Stressful Application Test
  3. 58全站用户行为数据仓库建设及实践
  4. Embedded Studio 使用笔记
  5. h5 字体加粗_div css布局对文字字体加粗样式设置
  6. buuctf_[ACTF新生赛2020]swp
  7. 要么听我的,要么走开(摘自《代码之道》第8章)
  8. 网吧免费上网的7种武器
  9. Elephant Swap的LaaS方案迅速崛起,构建全新DeFi2.0协议
  10. oracle导入dmp文件数据不全,oracle导入dmp文件(恢复数据)