poj 1112 经典最小差值dp(超级好题)

【环境搭建】使用openSfM+MVSNet重建稠密点云 本帖详细介绍了如何使用openSfM+MVSNet对真实采集的数据进行稀疏重建与稠密重建,并针对一些真实场景下可能遇到的问题进行了整理。 阅读详情

题意:
给你n个人,告诉你谁认识谁。要求将他们分成两组,每组的人相互都认识,且每组人数尽量接近(人数的差值最小)。

输入:第一行输入有几个人,第i行表示第i-1个人认识那些人,0表示结束。
输出:共两行,第i行第一个数表示i组有多少个人,然后依次输出这几个人,第二行同理。

Sample Input

5
2 3 5 0
1 4 5 3 0
1 2 5 0
1 2 3 0
4 3 2 1 0
Sample Output

3 1 3 5
2 2 4

思路:
先抽象成二分图,然后看能不能二分,如果不能直接输出,如果能,就抽象成可以dp的问题,用dp找差值最小的解。
抽象过程:
对于每一个节点,都有跟他相互连接的一堆节点,组成一个强连通分量,然后给这个强连通分量染色。问题就抽象成了这样,

有t个物品,每个物品有u价值和v价值,同时你可以选择将物品的u价值和v价值可以互换(swap(u,v)),对于每种物品,你都可以选择换或者不换。su = u价值的和,sv等于v价值的和,求abs(su-sv)最小时,所有物品换了或者没换。

初步定义dp[i]表示前i个物品的最小abs(su-sv)

一般的求最优解的dp都有一下思路:这一次的最优解由前几次的最优解构成。但是这个dp不一样,当前最优解可能是上一次的次优解得到或者是上一次的第三优解,所以这种dp无法写出状态转移方程。

再次定义dp[i][j]表示前i种物品能否构成差值为j的解,

这样定义的话,可行解可以推出可行解,状态转移方程就很明显了。

下面直接上代码

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <iostream>
#include <iomanip>
#include <string>
#include <algorithm>
#include <stack>
#include <queue>
#include <set>
#include <vector>
#include <map>

#define INF 0x3f3f3f3f
#define LINF 0x3f3f3f3f3f3f3f3f
#define ll long long
#define ull unsigned long long
#define uint unsigned int
#define l(x) ((x)<<1)
#define r(x) ((x)<<1|1)
#define lowbit(x) ((x)&(-(x)))
#define ms(a,b) memset(a,b,sizeof(a))
#define NSYNC std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);

using namespace std;

const int maxn = 110;
int n;//有多少个节点
int total;//有多少个强连通分量
int g[maxn][maxn];//i节点和j节点是否相连
int color[maxn];//第i个节点的值(颜色)是多少
int col[maxn][3];//第i个分量里值为j的节点有几个
int mark[maxn][3][maxn];//第i个分量里值为j的第k个节点是谁
int f[maxn][maxn * 2];//前i个连通分量能不能构成差值为j
int path[maxn][maxn * 2];//用于记录最优解是怎么构成的

int dfs(int u) {
	for (int i = 1; i <= n; i++) {
		if (i != u && (!g[u][i] || !g[i][u])) {
			if (color[i] == color[u]) return 0;

			if (!color[i]) {
				color[i] = 3 - color[u];
				mark[total][color[i]][col[total][color[i]]++] = i;
				if (!dfs(i))return 0;
			}
		}
	}
	return 1;
}

int main() {
	scanf("%d", &n);
	int tem, a; ms(color, 0);
	for (int i = 1; i <= n; i++)
		while (scanf("%d", &tem) && tem)
			g[i][tem] = 1;

	total = 0;
	for (int i = 1; i <= n; i++) 
		if (!color[i]) {
			total++;
			color[i] = 1;
			mark[total][1][col[total][1]++] = i;
			if (!dfs(i)) {
				printf("No solution\n");
				return 0;
			}
		}
	
	int a1, a2; ms(f, 0);
	f[1][col[1][1] - col[1][2] + n] = 1;
	f[1][col[1][2] - col[1][1] + n] = 1;
	path[1][col[1][1] - col[1][2] + n] = 1;
	path[1][col[1][2] - col[1][1] + n] = 2;
	for (int i = 2; i <= total; i++) {
		a = col[i][1] - col[i][2];
		for (int j = 0; j <= n * 2; j++) {
			if ((j - a) >= 0 && (j - a) <= 2 * n&&
				f[i - 1][j - a] == 1) {
				f[i][j] = 1;
				path[i][j] = 1;
			}
			else if ((j + a) >= 0 && (j + a) <= 2 * n&&
				f[i - 1][j + a] == 1) {
				f[i][j] = 1;
				path[i][j] = 2;
			}
		}
	}

	int i, j;
	for (i = n; i <= 2 * n; i++)if (f[total][i])break;
	for (j = n - 1; j >= 0; j--)if (f[total][j])break;
	int ans = (i - n) < (n - j) ? i : j;
	int tro = ((n - (ans - n)) / 2) + (ans - n);
	printf("%d", tro);
	int loc;
	tem = ans;
	for (int i = total; i >= 1; i--) {
		loc = path[i][tem];
		for (int j = 0; j < col[i][loc]; j++)
			printf(" %d", mark[i][loc][j]);
		tem = tem - (col[i][loc] - col[i][3 - loc]);
	}

	tem = ans;
	printf("\n");
	printf("%d", n - tro);
	for (int i = total; i >= 1; i--) {
		loc = 3 - path[i][tem];
		for (int j = 0; j < col[i][loc]; j++)
			printf(" %d", mark[i][loc][j]);
		tem = tem - (col[i][3 - loc] - col[i][loc]);
	}
	printf("\n");

	return 0;
}
HRnet的pytorch实现 阅读详情

相关推荐

Synopsys AXI VIP 从环境搭建到首个验证场景运行

本文详细介绍了Synopsys AXI VIP从环境搭建到首个验证场景运行的全过程,包括VIP安装、示例工程生成、验证环境解析、仿真调试技巧及进阶优化。特别针对AXI协议验证中的常见问题提供了实用解决方案,帮助工程师快速掌握这一SoC验证必备工具。

weixin_29185493的博客 340

差值 dp 入门

差值 dp 的入门讲解,深入浅出,例题引导,7000 字倾情奉献,快来看ヾ(•ω•`)o

YLCHUP的博客 947

S/4中的16种特殊库存类型

S/4中的16种特殊库存类型

yanzibing99的博客 1万+

P1651 塔(差值dp)

题意: 解法: 令d[i][j]表示前i个积木,两高度积木差值为j时,积木的最大总高度. 转移方程: 设当前积木高度为x 1.不选,d[i+1][j]=max(d[i+1][j],d[i][j]). 2.放在第一个塔上,d[i+1][j+x]=max(d[i+1][j+x],d[i][j]+x). 3.放在第二个塔上,d[i+1][j-x]=max(d[i+1][j-x],d[i][j]+x). 打个滚动数组防止MLE, 同时dp数组下标有负数,需要加个base变正数. code: #include

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 291

基于STM32F103C8T6的循迹避障小车完整制作过程(详细)----上篇(第123点)

基于STM32F103C8T6的循迹避障小车完整制作过程 由于本人的一个小项目,要做一个基于STM32的循迹避障小车,前后花了约1周的时间,这个过程种也参考了很多大神分享的资料,学到很多的东西。但是资料都比较分散,有些东西也不好找,在这里就想把自己制作小车的一个整体过程记录分享一下,希望能够帮到你。 我自己也算是一个小白,之前有做过 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎...

weixin_43924857的博客 14万+

YOLOv11改进策略【损失函数篇】| arXiv2025 TeLU双曲正切指数线性单元 强梯度防消失 + 解析光滑稳训练,极速提升收敛与泛化

本文记录的是。TeLU(Hyperbolic Tangent Exponential Linear Unit)通过。本文利用TeLU激活函数,以x⋅tanhex统一实现正区间强梯度加速收敛与负区间持续梯度避免死神经元,全程保持解析光滑与极低计算开销,,显著提升深度网络在分类、检测、分割、时序任务中的收敛速度、精度与泛化鲁棒性。

Limiiiing的博客 224

poj 1112图论+DP

就这几天在扫分类练习题时在DP里看到的,竟是POJ的原题。。。不好怎么说,DP是有,但比较少,更郁闷的是前几道状态压缩DP的被我的搜索水过去了,搜索竟比标程DP快,神奇的分类练习! 饿,来讲题目吧。这道题的确很好,正确的思路很难想到,我一开始想到的就是二分图01着色,用DFS直

默默努力! 450

树莓派 RP2350B 开发环境搭建

本文介绍了树莓派RP2350B开发环境的搭建过程。

张一西的博客 286

poj 1112 Team Them Up!(建图+dp)

http://poj.org/problem?id=1112

madaidao的专栏 730

一、适配显示服务

基于rk3568适配显示服务,调动gpu;

XiaoC_Android的博客 1001

ArcGIS实验教程——实验十九:网络分析(最短路径实现)

一、实验描述 网络分析模块用于实现基于网络数据集的网络分析功能,包括路径分析、服务区分析、最近设施点分析、OD成本矩阵分析、多路径配送分析、位置分配分析和高级网络的管理与创建等。 网络数据集不同于几何网络,是一种高级的连接模型,能够展示复杂的细节,拥有丰富的网络属性模型,可以模拟网络阻力、网络限制以及网络层次等。 本实验重点演示网络分析中最短路径的实现过程。 二、实验内容 1、网络数据集...

智慧空间实验室 5681

【差值DP】#P3274. 分钱

【代码】【差值DP】#P3274. 分钱。

学生党,喜欢编程(C++)玩暗区。学业重,经常拖更请谅解 224

DC Error: The power pin VDD on the cell UASA1/CG_X8_Rdsd2pcm is unconnected. (UPF-581)

【代码】DC Error: The power pin VDD on the cell UASA1/CG_X8_Rdsd2pcm is unconnected. (UPF-581)

baidu_34971492的博客 969

POJ_1112_Team Them Up!

#include #define inf 1000000 using namespace std; const int MAXN = 101; int map[MAXN][MAXN]; int id[2][MAXN]; int color[MAXN]; int dp[MAXN][MAXN]; int tmp[MAXN][MAXN]; struct { int c1, c2; int i, j; }pre[MAXN][MAXN]; int N, t; bool DFS(

TheAlgorithmArt的专栏 2318

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

poj1112 Team Them Up!

/* * poj1112 AC * DP 背包问题 与poj1636 prison rearrangement如出一辙。 * 问题挺经典,重点在于构造模型。 * 首先考虑将所有人分为互斥的若干部分,这便是背包问题中物品了。 * 之后,要将每个"物品"分为放在A和放在B的两个部分,然后进行DP。 * * I. 求补图,将表示两个人相互认识的边去除,连接所有互相不认识, * 或单

hanhansoul的专栏 587

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

POJ 1112(染色+连通分量+DP)

这是一道综合的好题! 题目大意:把n个人分成2各组,每一个人有他所认识的人。所分的组有四点要求: 1、每个人都必需属于一个组。 2、每个组至少有一个人。 3、每个组里面的每个人必需互相认识。 4、两个组的成员应尽量接近。 首先分析这道题目,题目给出的是一个有向图,即如果有A认识B,但不一定有B认识A。但是在所分配的组里面,任意两个人都要互相认识。 1、先读入数据建立有向图,...

weixin_30802171的博客 185

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Poj 1112 Team Them Up!

首先分析这道题目,题目给出的是一个有向图,即如果有A认识B,但不一定有B认识A。但是在所分配的组里面,任意两个人都要互相认识。 1、 先读入数据建立有向图,然后对这个有向图进行处理,如果两个点之间的边是单向边,就认为两个点之间无边(因为这两个人不互相认识),对于两个点间的双向边,即建立一条无向边(这两个人互相认识),这样就可以把一个有向图转化为一个无向图。 2、 将这个无向图转化为它的

Mr.Phoebe的专栏 1235

POJ 1112 Team Them Up!

http://poj.org/problem?id=1112 题意:一共N个人,给出每个人和其余人是否认识,把所有人分成两组。 要求1)每一个人 属于其中一组。 2)每组必须有人  3)每组内的所有人 必须相互认识(有向边 相互认识 才是认识)  4)两组的人数之差尽可能小 先读入数据,把两两不认识的人 连边, 建图,则同一边连接的两点不能在同一组。建完图后,进行DFS 染色,可以

Napoleon 1024

POJ 1112 Team Them Up!【二分图染色+DP】

题意: 有 n 个人,他们之间的关系有四种,给出一些关系 a,b 表示b 知道 a,现在想把这些人分成两组,每个组里面所有人都相互知道,如果可以分成这两组, 找出两组人数相差最少的情况。 分析:如果 a 和 b 不是相互知道,就在a,b之间连一条双向边,表示a 和b 绝不能分在一个组里 建好图之后,进行染色,判断是否是二分图,如果不是二分图,肯定不存在符合...

weixin_33998125的博客 184

【POJ 1112】Team Them Up!(二分图染色+DP)

Description Your task is to divide a number of persons into two teams, in such a way, that: everyone belongs to one of the teams; every team has at least one member; every person in the team knows ev...

weixin_34092370的博客 89

POJ 1112 Team Them Up! (图(反图)染色+连通分量+动态规划) 解释代码

题目引用大家的 首先思想参考:http://www.cppblog.com/linyangfei/archive/2008/08/08/58295.html 代码参考:http://blog.youkuaiyun.com/behappyxiang/article/details/8484811   然后根据我个人的理解又把代码自己写了一遍,和上面的那个思想几乎一样,只是自我的解释更多了些。但大家不知道

长虹剑的专栏 1498

g_2 + g_3

g_2 二分染色 + DP 染色后的题大概就是 先计算出n对数字的和sum 在n对数字中从每一对中选一个数字,然后计算这n个数的和tot 让sum-tot 和tot的差值绝对值最小 这部分可以背包dp和另一种 dp[i][j] = 1表示存在选了前i个数字中差异为j的情况 然后代码中注释写了接下来的操作=_= 注意差值为负数要修正到正数/*poj1112*/ #include

turtlew的博客 427

soj 4511 dp差值

Problem: Analyse: - 差值dp,最大限度的减少信息容易,而有最低的维度. - 这里要想象有两个任务堆,左边一个,右边一个,然后往上面添加任务. - 这个题与前面的积木堆得不同是,任务的执行顺序的限制,这需要在dp转移的时候结合实际来考虑. - 定义dp[i][j]dp[i][j]:前ii个物品形成左堆和右堆得差值为jj的序列的最小时间 . - 转的核心就是本机器里的任务

JIBANCANYANG 539

CF - 712D 差值dp + 前缀和优化

题意:A和B玩游戏,游戏一共分为t局,两个人各有一个初始分数a和b,每一局,两个人需要在[-k,+k]这个区间中任意选择一个整数,并且加到自己的分数中去,问游戏结束后,有多少种情况,A的分数可以严格大于B?(只要任意一局有至少一个人选择的分数不同两种,就算作不同情况)思路:dp进行计数,看到这种差值不是很大的关系,可以考虑dp的其中一维设置成两人分数的差值 设dp[i][j]表示到第i局为止,a-

Bahuia的博客 653

【洛谷 P1651】 塔 (差值DP)

题目链接 题意:\(n\)个木块放到两个塔里,每个木块可放可不放,使得两塔高度相同且高度最大,求最大高度。 这个差值\(DP\)的思维难度还是很大的,没想出来,我就打了一个\(dfs\)骗了好像\(20\)还是\(30\)分吧(看来搜索也写挂)。 正解是\(DP\),\(f[i][j]\)表示前\(i\)块木块使得两个塔的高度差为\(k\)时高度最大的那个是什么(神奇的状态) 那么无非就\(4\)...

weixin_33958366的博客 185

POJ 1112 二分图判定 + DP

题意 传送门 POJ 1112 Team Them Up! 题解 建立原图的补图,即若两个人之间不相互认识,则连一条边;此时一条边的两个端点不能分在同一组中。那么判断是否存在可行的分组方案,染色法进行二分图判定即可。由于 N≥2N\geq 2N≥2,则若补图是二分图,则满足每一组至少存在一个人。 记录补图连通分量 iii 染色为 kkk 的节点数 sum[i][k]sum[i][k]sum[i][k]。设两个组为 A,BA,BA,B,则问题转化为求解从每一个连通分量中选取染为某个颜色的节点集合加入 AAA,

neweryyy的博客 288
上一篇: cf 1312E dp中等题
下一篇: poj 1113 凸包模板 (poj的远古c++居然不支持lambda)
FawkesLi
博客等级 码龄8年 21粉丝 170原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值