
动态规划
进击的小菜
这个作者很懒,什么都没留下…
展开
-
NEFU OJ16 Function Run Fun
简单dp问题,求出所有解。如果直接递归会超时 #include #include using namespace std; int w[21][21][21]; void getValue() { for(int i =0;i<21;++i) { for(int j =0;j<21;++j) { for(int k =0;k<21;++k) {原创 2016-09-12 17:32:12 · 285 阅读 · 0 评论 -
NEFU OJ17数字三角形
一道简单的动规题目,理解题意既可。 dp[i][j] = ((dp[i-1][j]>dp[i-1][j-1])?dp[i-1][j]:dp[i-1][j-1])+ a[i][j] 这里出错了,是a?b:c运算符优先级的问题。#include #include using namespace std; int a[101][101] = {0}; int dp[101][101]原创 2016-09-14 09:18:32 · 285 阅读 · 0 评论 -
NEFU OJ 18滑雪
dp思想:每个最优解都和子最优解有关,数组存储每个步骤的解 dfs:遍历方法的改变,输入数据是不规则的,不能按照之前的dp思路访问,而是类似于图的遍历 #include #include using namespace std; int a[100][100] = {0}; int dp[100][100] = {0}; int dx[4] = {-1,0,0,1}; int原创 2016-09-14 10:53:07 · 384 阅读 · 0 评论 -
NEFU 19采药
0-1背包+动态规划 关键是了解状态方程。用这两个图来推导原创 2016-09-19 10:20:30 · 247 阅读 · 0 评论 -
NEFU OJ20
用dp的思想,递归肯定超时 #include #include using namespace std; int n,times; int dp[16][16]; int main() { int time,n; dp[0][0] = 0; for(int i =0;i<=15;++i){ dp[0][i] = 1; dp[i][0] = 1; } for(原创 2016-09-19 11:22:43 · 328 阅读 · 0 评论 -
NEFU OJ21最长上升子序列
仍然用dp,因为最长上升字序列是最优问题,而且保证最优解由最优子解构成 数组为a[n],解为dp[n] dp[i]表示以a[i]结尾的最长上升子序列长度 i的范围:[0-j),如果a[j] > a[i],则存在上升子序列dp[i] +1,求最长则得d[j]。 注意不一定dp[n-1]是最长的,所以还要求d[n]中最大值。 #include #include using names原创 2016-09-19 11:51:59 · 276 阅读 · 0 评论 -
NEFU OJ 28月之数
关键是寻找规律,dp[i]表示位数为i+1的月之数 用到dp的思想 #include int dp[20]; int main() { dp[0] = 1; int temp; for(int i = 1;i<20;++i) { temp = (1<<(i-1)); dp[i] = (temp+dp[i-1])*2-temp; } int m,n; while(原创 2016-09-21 16:36:44 · 313 阅读 · 0 评论 -
NEFU OJ36 Magic Tree
可以用dp,但有两个dp数组,而且是三维的,原谅我dp知识的匮乏。。 以后补上更具体说明 #include #include int maxs(int x, int y) { if (x > y) return x; else return y; } int main() { int dp[1002][32][2]; int tree[1002]; int mint, st原创 2016-09-26 10:07:40 · 371 阅读 · 0 评论