• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
 






tim11

 
 

Powered by 博客园
博客园 | 首页 | 新随笔 | 联系 | 订阅 订阅 | 管理

随笔分类 -  动态规划

dp是什么? 你强他则强,你若他则弱。
 
poj2378(Tree Cutting)(动态规划)
摘要:http://poj.org/problem?id=2378他人具体代码:View Code #include<cstdio>#include<vector>#include<cstring>using namespace std;const int maxn = 10010;vector<int> edge[maxn];int sum[maxn],ans[maxn],n;void dfs(int u,int fa){ sum[u]=1; int i,j; bool flag=true; for(i=0;i<edge[u].size();i 阅读全文
posted @ 2012-11-02 23:42 tim11 阅读(189) 评论(0) 推荐(0)
hdu4283(You Are the One)(dps+dp)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4283(1)代码量短,主要是要分析清楚问题的本质。用到深搜和动态规划,精髓是动态规划里包含的思维。他人代码:View Code #include <iostream>#include <cstdio>#include <algorithm>#define INF 0x3f3f3f3f#define MAXN 100using namespace std;int N, s[MAXN+5], f[MAXN+5][MAXN+5], seq[MAXN+5];int dfs(int 阅读全文
posted @ 2012-10-28 17:25 tim11 阅读(183) 评论(0) 推荐(0)
hdu4328(Cut the cake)(dp)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4328(1)题目有改动,两色相间的必须是正方形。他人具体代码:View Code #include <cstdio>#include <cstring>const int MAXN = 1005;int left[3][MAXN][MAXN], right[3][MAXN][MAXN], top[3][MAXN][MAXN];char a[MAXN][MAXN];inline int min(const int &x, const int &y){ return x & 阅读全文
posted @ 2012-10-27 00:16 tim11 阅读(191) 评论(0) 推荐(0)
hdu4362(Dragon Ball)(动态规划)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4362(1)动态规划d[i][j]=min(d[i-1][k] + |a[i-1][k].x - a[i][j].x| + a[i][j].p);(2)去绝对值技巧:对上一层数轴上的 x 值排序,上面每个元素xL[j]=min(xL[j-1] , d[i-1][j]-a[i-1][j].x) ,xR[j]=min(xR[j+1] , d[i-1][j]+a[i-1][j].x) 。(3)对于每个d[i][j] 只要通过a[i][j].x判断在上一层什么位置就行了,对于有序的序列查找位置。动态规划+排序预处+二 阅读全文
posted @ 2012-10-24 23:42 tim11 阅读(225) 评论(0) 推荐(0)
poj1976A Mini Locomotive(dp)(***)
摘要:http://poj.org/problem?id=1976(1)有n节火车,用3个火车头去拉动,每个火车头拉动的车厢是连续的,且上限为m,求最大的载客量。(2)核心的部分:f[i][j]=max(f[i-1][j], f[k][j-1]+a[i]-a[k]); f[i][j]表示拉动前 i 节车厢由 j 个火车头拉动的最优解,a[i]是经由:a[i]+=a[i-1]; 处理过的,表示还不是特别理解。。。具体代码:View Code #include<cstdio>#include<iostream>#include<algorithm>using name 阅读全文
posted @ 2012-09-16 16:24 tim11 阅读(130) 评论(0) 推荐(0)
zstu1897Brackets(dp)
摘要:http://10.16.23.21:8080/JudgeOnline/showproblem?problem_id=1897(1)简化版的括号序列;(2)dp顺序,长度由0起递增,以便于递推的实现。具体代码:View Code #include<stdio.h>#include<string.h>#define N 300char ch[N];int dp[N][N] ;int main(){ int i, j, k, t, n; while(scanf("%s", ch)!=EOF) { if(strcmp(ch, "end" 阅读全文
posted @ 2012-09-16 15:24 tim11 阅读(149) 评论(0) 推荐(0)
zstu2171WordStack(zz状态压缩dp)(*)
摘要:http://10.16.23.21:8080/JudgeOnline/showproblem?problem_id=2171(1)这个题目的代码只是抄了一遍,还没有自己独立打出来。(2)思路其实不复杂,分为三步: 1)求两两关系len[i][j]的最优值; 2)求加入一个新元素k后的最优值dp[i|(1<<k)][k]; 3)求的dp[(1<<n)-1][j]的最大值。具体代码:View Code #include<stdio.h>#include<string.h>#include<algorithm>using namespac 阅读全文
posted @ 2012-09-16 15:16 tim11 阅读(168) 评论(0) 推荐(0)
poj1191 棋盘分割(dp)
摘要:http://poj.org/problem?id=1191(1)棋盘任意分割不是这道题所要讨论的,注意到题目中提到的“不允许的分割”,故会出现 s=min(s, d(n-1, x1, y1, i, y2)+sum(i+1, y1, x2, y2)); s=min(s, sum(x1, y1, i, y2)+d(n-1, i+1, y1, x2, y2)); 这样的规划关系(横向分割时)。(2)比较两种写法: 1) float ans=d(k, 1, 1, 8, 8); ans=sqrt((float)ans/k-pow(sq... 阅读全文
posted @ 2012-08-15 20:12 tim11 阅读(134) 评论(0) 推荐(0)
poj1141 Brackets Sequence( 括号序列)(dp)
摘要:http://poj.org/problem?id=1141括号序列问题有几个注意点:(1)不能用scanf("%s", str), 而要用gets(str),因为输入可能含有空格(空序列'' "符合要求);(2)‘ l ’表示所考虑对象的长度, 从0到n-1枚举(故单独处理dp[i][i]);(3)dp[i][j]表示‘i ’到 ‘ j ’的最小长度,也可以换种意义,表示‘ i ’到‘ j ’的最小添加长度,此时所有dp[i][j]要做适当调整。具体代码:View Code #include<stdio.h>#include<s 阅读全文
posted @ 2012-08-15 15:33 tim11 阅读(177) 评论(0) 推荐(0)