摘要:
stringstream 的用法就见代码吧: 1 ///string 转 int 2 int main() 3 { 4 string a="10"; 5 stringstream ss; 6 int n; 7 ss<<a; 8 ss>>n; 9 n+=5; 10 printf("%d\n",n); 阅读全文
摘要:
Halloween Costumes 基础区间dp AC_Code 1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int maxn = 110; 5 int dp[maxn][max 阅读全文
摘要:
思路: 可以发现朴素的区间dp已经不足以解决这个问题了。对于石子合并问题,有一个最好的算法,那就是GarsiaWachs算法。时间复杂度为O(n^2)。 设序列是stone[maxn],从左往右,找到一个最小的且满足stone[k-1] <= stone[k+1]的k,找到后合并stone[k]和s 阅读全文
该文被密码保护。 阅读全文
摘要:
这道题是不可以用贪心的:因为每次要求合并相邻的两堆,不能保证每次合并的都是最多的,或是最少的 有一道题是链式的:石子归并 加上环怎么办? 断环为链:将长度为n的链复制一份接在后面,环的情况就是长度为2n的链中任意连续的长度为n的链。 注意平行四边形只能用于min,这道题要求的max是不能用平行四边形 阅读全文
摘要:
【思路】 我们 dp[i][j] 来表示合并第 i 堆到第 j 堆石子的最小代价。 那么状态转移方程为 dp[i][j] = min ( dp[i][j],dp[i][k]+dp[k+1][j]+w[i][j]); 其中, w[i][j] 表示把两部分合并起来的代价,即从第 i 堆到第 j 堆石子个 阅读全文
摘要:
AC_Code 1 #include <bits/stdc++.h> 2 #include <cstdio> 3 #include <cstring> 4 #include <string> 5 #include <cmath> 6 #include <queue> 7 #include <stac 阅读全文
摘要:
给出伪代码:(可以看出时间复杂度为O(n^3)) 1 for(int len=1;len<=n;len++){///len为区间长度 2 for(int l=1;l<=n-len+1;l++){ 3 int r=l+len-1; 4 for(int k=l;k<r;k++){ 5 m[l][r]=m 阅读全文
摘要:
AC_Code: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <string> 5 #include <cmath> 6 #include <queue> 7 #include <stack> 8 阅读全文
摘要:
引用博客 【引入】 首先我们要清楚数位dp解决的是什么问题: 求出在给定区间 [A,B] 内,符合条件 f(i) 的数 i 的个数。条件 f(i) 一般与数的大小无关,而与数的组成有关 由于数是按位dp,数的大小对复杂度的影响很小 【设计搜索】 这里我们使用记忆化搜索实现数位dp。本质上记搜其实就是 阅读全文