oj
ethhhy
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
1018
普通的dp题,虽然内存用得有点大,但还是AC了。。。d[i][j]代表i个设备且他们当中最小带宽是j时的最小总费用,最后结果拿所有有值的d[n][j]算min{所有j/d[n][j]}核心:每读入一对d和p,测试所有一行前一个状态d[i-1][k]是否有值,有则更新这一状态(测试是否加上这个设备)tmp=min(d,k)d[i][tmp]=min{ d[i][tmp] , d[原创 2015-04-23 17:20:31 · 288 阅读 · 0 评论 -
背包之01背包、完全背包、多重背包详解
背包之01背包、完全背包、多重背包详解 PS:大家觉得写得还过得去,就帮我把博客顶一下,谢谢。首先说下动态规划,动态规划这东西就和递归一样,只能找局部关系,若想全部列出来,是很难的,比如汉诺塔。你可以说先把除最后一层的其他所有层都移动到2,再把最后一层移动到3,最后再把其余的从2移动到3,这是一个直观的关系,但是想列举出来是很难的,也许当层数n=3时还可以模拟下,再大一些就转载 2015-05-01 19:57:28 · 388 阅读 · 0 评论 -
1837
d[i][j+w[i]*c[k]]+=d[i-1][j]原创 2015-04-27 20:34:21 · 280 阅读 · 0 评论 -
1042
贪心算法相当于给定n个湖,每次选择最好的那个湖,同时选择时降低这个湖的大小。原创 2015-05-11 11:24:53 · 720 阅读 · 0 评论 -
3624
dp,最基础的01背包Memory 184KTime 157MS#include #include int dp[12900];int main (void){ int n, m, i, j, w, v; while(scanf("%d %d",&n, &m)==2){ memset(dp,0,sizeof(dp)); for(i = 1; i<=n;原创 2015-04-28 09:20:44 · 494 阅读 · 0 评论 -
1384
完全背包,和01背包区别就是中间的循环颠倒过来了(要保证是基于这次选择上)片段 int w, p; scanf("%d",&T); while(T--) { scanf("%d%d",&empty,&full); sum=full-empty; for(int i=0;i<=sum;i++)原创 2015-04-30 22:11:49 · 355 阅读 · 0 评论 -
1088
dp 记忆化用了两个数组,一个记录所有点的数据,一个是dp[i][j]记录每个点的最大距离,当最小时(无法降低时)为1如25-24-23-……-2-1长度是25(点的数量)dp的伪代码f( i, j ){if dp[i][j]>0 return dp[i][j]for 点i,j的四个方向{ if 坐标没溢出{ if 可以向那个原创 2015-04-25 19:07:21 · 296 阅读 · 0 评论 -
1050
一开始思路错了,活活折腾了几小时。。。以后一小时想不出来直接不想了!其实就是最大子序列,每行与之后几行压缩成一行再求就ok了~之前一直想先求再压缩,整个人都斯巴达了也没想出来。。。最可恨的是过了一天再看才发现一开始思路就不对,简直智商捉急原创 2015-04-25 10:54:57 · 248 阅读 · 0 评论 -
1015(WA)
150421用dp,d[i][j]代表选了j个人且差为i的值(所有选中的di+dp的总和),关键为d[i+sub[k]][j+1] = max{ d[i][j]+plus[k], d[i+sub[k]][j+1]}我觉得应该没错呀,纠结了好久,另外网上找了份能AC的代码……核心差不多,但他加了一些东西,好吧,之后再研究原创 2015-04-21 21:08:37 · 266 阅读 · 0 评论 -
2479&&2593
先从左到右遍历,把以a[i]为结尾的最大子序列存储在dp[i]中再从右向左遍历,测试以a[i]为开头的最大子序列与dp[i-1]之和,保存最大值输出原创 2015-05-05 12:35:16 · 310 阅读 · 0 评论
分享