摘要:
题目大意 N件物品, 每件物品价值为a[i],数量为b[i], 问分成两堆差值尽量小.解题思路 感觉像是多重背包的变形~~~ 状态DP[N][V]表示,前i件物品,价值为V的方案数 转移方程 dp[i][ j+k*a[i] ] += dp[i-1][j] // k = 0..b[i] #include<stdio.h>#include<stdlib.h>#include<string.h>const int N = 250010;int dp[2][N];int main(){ int a[110], b[110], n; while( scanf(&quo 阅读全文
摘要:
对于路径覆盖概念请点击以下链接: Path Cover#include<stdio.h>#include<stdlib.h>#include<string.h>const int N = 150;int n, m;int ma[N],mb[N];bool g[N][N], vis[N];int path( int u ){ for(int v = 1; v <= n; v++){ if( g[u][v] && !vis[v] ){ vis[v] = 1; if( ma[v] == -1 || path( ma[v] )){ ... 阅读全文
摘要:
题意 一个序列,求其所有长度为k的子序列最大最小值解法 单调队列维护最大最小。平摊时间复杂度到O(1)这题T了几次,因为C++,G++编译器不同的缘故。 感谢 纳米,科普。 具体见下yefeng1627(361072774) 19:06:28 求解 c++ 与 g++ (GUN c++)yefeng1627(361072774) 19:06:45 这个是为什么? 好像记得去年暑假HDU多校也有过这样的事情...yefeng1627(361072774) 19:06:53 有一题~~纳米(549950130) 19:07:05 所谓C++... 一般都是指VC..ye... 阅读全文
摘要:
题意 一个序列 a_1,a_2,..,a_n, 求最长子序列,满足 low <= max{ai}-min{ai} <= high.解题思路 首先考虑区间 [i,j], 我们可以通过固定右边界,来实现区间的滑动.以求解最佳值. 我们首先观察题目要求 low <= max{a_i,a_j}-min{a_i,a_j} <= high. 假定我们固定了右边界, 令 d = max{a_i,a_j} - min{a_i,a_j} 意味着我们只能移动 左边界i, 对于左边界的移动会导致两种情况 1. max{ a_i.a_j } 下降 2. min{ a_i, a_j } ... 阅读全文