
动态规划
march23
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
石子合并(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 有N堆石子排成一排,每堆石子有一定的数量。现要将N堆石子并成为一堆。合并的过程只能每次将相邻的两堆
#include #include //状态转移方程:m(i, j) = min(m(i,k),m(k + 1,j)) + sum(i, j)(i #include //区间型动态规划 using namespace std;//合并石子的每个阶段必定是两堆石子的合并 int d[201], sum[200][200], m[200][200];//m[i][j] 表示从i到j的最转载 2017-08-20 20:52:34 · 697 阅读 · 0 评论 -
Vasya is the beginning mathematician. He decided to make an important contribution to the science an
题意:1~1000000000之间,各位数字之和等于给定s的数的个数 每行给出一个数s(1 ≤ s ≤ 81),求出1~10^9内各位数之和与s相等的数的个数。 1、只有s=1时,10^9的系数才能为1,否则就大于10^9; 所以和为1的要单一列出来。 2、如果s!=1: 定义状态dp[i][j]为前i位各位数之和为j的情况数量:对于前i为的数字之和最大为:9*i,即每一位数字都是9.转载 2017-08-22 10:05:53 · 291 阅读 · 0 评论 -
有n个矩形,每个矩形可以用a,b来描述,表示长和宽。矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于旋转X90度)。例如(1,5)可以嵌套在(6,2)内,但
.#include 02.#include 03.#include 04.using namespace std; 05.struct stu 06.{ 07.int a,b; 08.}s[1020]; 09.int dp[1020]; 10.int cmp(stu x,stu y) 11.{ 12.if(x.a 13.r转载 2017-08-22 19:21:14 · 3067 阅读 · 0 评论 -
描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 输入 第一行一个整数0<n<20,表示有n个字符串要处理 随后的n行,每行有一个字符串,该字符串的长度不
01.#include 02.#include 03.int main() 04.{ 05.char a[10000]; 06.int count[10000]; 07.int i,j,k,m,len,ch; 08.scanf("%d",&m); 09.while(m--) 10.{ 11.scanf("%s",a); 12.len原创 2017-08-22 19:23:13 · 1207 阅读 · 0 评论 -
7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (Figure 1) Figure 1 shows a number triangle. Write a program that calc
01.#include 02.#include 03.#include 04.using namespace std; 05.int dp[110][110],num[110][110]; 06.int main() 07.{ 08.int n; 09.while(~scanf("%d",&n)) 10.{ 11.memset(dp,0,原创 2017-08-22 19:24:52 · 1680 阅读 · 0 评论 -
描述 有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第m级,共有多少走法? 注:规定从一级到一级有0种走法。
01.#include 02.int f[41]; 03.int main() 04.{ 05.int n,m,i; 06.f[1]=0; 07.f[2]=1; 08.f[3]=2; 09.for(i=4;i 10.f[i]=f[i-1]+f[i-2]; 11.scanf("%d",&n); 12.while(n--) 13.原创 2017-08-22 19:57:58 · 14838 阅读 · 1 评论 -
给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来。
01.#include 02.#include 03.#include 04.using namespace std; 05.int main() 06.{ 07.int N,n; 08.int dp[200][200]={0}; 09.cin>>N; 10.while(N--) 11.{ 12.char a[200]={0};原创 2017-08-22 20:41:06 · 7309 阅读 · 0 评论 -
邮票分你一半小珂最近收集了些邮票,他想把其中的一些给他的好朋友小明。每张邮票上都有分值,他们想把这些邮票分成两份,并且使这两份邮票的分值和相差最小(就是小珂得到的邮票分值和与小明的差值最小),现在每张
背包问题变形。。。把这些数放在一个数总和的一半大的一个背包 中,使其尽量装的最多。则是两半差值最小 #include #include #include #include using namespace std; int num[1005]; int dp[100500]; int main() { int c,n,i,add,j; scanf("%d",&c); whil转载 2017-08-24 10:36:45 · 712 阅读 · 0 评论