动态规划如何去找动态转移方程?同学告诉我要去枚举找...但我不懂...怎么枚举...状态是怎么找的?教我一下举个例子吧!

wwwxxxzzz2022-10-04 11:39:541条回答

动态规划如何去找动态转移方程?
同学告诉我要去枚举找...但我不懂...怎么枚举...状态是怎么找的?教我一下举个例子吧!谢谢(要题目和解析)

已提交,审核后显示!提交回复

共1条回复
ivanwencai 共回答了15个问题 | 采纳率80%
枚举就是指把一些答案先算出来,然后类似于找规律那样,找到一般情况的技术方法,写出状态转移方程.例子:这个是去年NOIP提高组复赛的一道题“传纸条”,是比较经典的动规+递推,可以看看.描述 Description
小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是,他们可以通过传纸条来进行交流.纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,1),小轩坐在矩阵的右下角,坐标(m,n).从小渊传到小轩的纸条只可以向下或者向右传递,从小轩传给小渊的纸条只可以向上或者向左传递.
在活动进行中,小渊希望给小轩传递一张纸条,同时希望小轩给他回复.班里每个同学都可以帮他们传递,但只会帮他们一次,也就是说如果此人在小渊递给小轩纸条的时候帮忙,那么在小轩递给小渊的时候就不会再帮忙.反之亦然.
还有一件事情需要注意,全班每个同学愿意帮忙的好感度有高有低(注意:小渊和小轩的好心程度没有定义,输入时用0表示),可以用一个0-100的自然数来表示,数越大表示越好心.小渊和小轩希望尽可能找好心程度高的同学来帮忙传纸条,即找到来回两条传递路径,使得这两条路径上同学的好心程度只和最大.现在,请你帮助小渊和小轩找到这样的两条路径.
输入格式 Input Format
输入第一行有2个用空格隔开的整数m和n,表示班里有m行n列(1
1年前

相关推荐

摆花 free pascal 动态规划
摆花 free pascal 动态规划
题目描述
  小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共 m 盆。通过调查顾客的喜好,小明列出了顾客最喜欢的 n 种花,从 1 到 n 标号。为了在门口展出更多种花,规定第 i 种花不能超过 ai 盆,摆花时同一种花放在一起,且不同种类的花需按标号的从小到大的顺序依次摆列。
  试编程计算,一共有多少种不同的摆花方案。
输入
  第一行包含两个正整数 n 和 m,中间用一个空格隔开。
  第二行有 n 个整数,每两个整数之间用一个空格隔开,依次表示 a1、a2、……an。
输出
  输出只有一行,一个整数,表示有多少种方案。注意:因为方案数可能很多,请输出方案数对 1000007 取模的结果。
样例输入
2 4
3 2
样例输出
2
提示
【输入输出样例说明】
有 2 种摆花的方案,分别是(1,1,1,2), (1,1,2,2)。括号里的 1 和 2 表示两种花,
比如第一个方案是前三个位置摆第一种花,第四个位置摆第二种花。

program p1104;
var n,m,i,j,k,l:integer;
ans:longint;
a:array[1..100] of integer;
f:array[0..100,0..100] of longint;
begin
readln(n,m);
ans:=-maxlongint;
for i:=1 to n do
read(a[i]);
for i:=1 to n do
f[i,0]:=1;
for j:=1 to m do
f[0,j]:=0;
for i:=1 to n do
for j:=1 to m do
begin
if j l:=j
else l:=a[i];
for k:=0 to l do
f[i,j]:=(f[i,j]+f[i-1,j-k]) mod 1000007;
end;
for i:=1 to n do
for j:=1 to m do
if f[i,j]>ans then ans:=f[i,j];
writeln(ans);
end.

各位大侠,哪里错了。。。速度回答
打不着火1年前1
shuteyes 共回答了14个问题 | 采纳率92.9%
我觉得lz的方法有点麻烦。
var
f:array[0..100,0..100]of longint; //f[i,j]表示前i种花摆了j盆的方法数
a:array[0..100]of longint;
n,m,i,j,k:longint;
begin
readln(n,m);
for i:=1 to n do
begin
read(a[i]);
if a[i]>m then a[i]:=m; //如果花的个数多余m,把它当成m来算,多了也没用。
end;
for i:=0 to a[1] do
f[1,i]:=1; //初值。因为同一种花,不论放多少盆都只有一种方法。
for i:=2 to n do
begin
for j:=0 to m do
begin
for k:=a[i] downto 0 do
if(j>=k)then f[i,j]:=(f[i,j]+f[i-1,j-k])mod 1000007; //状态转移方程
end;
end;
writeln(f[n,m] mod 1000007);
end.
信息学 动态规划 习题
hunancxdjp1年前1
wl502 共回答了12个问题 | 采纳率75%
3.动态规划典型例题与习题
3.1 最长不降子序列
3.2 背包问题
3.3 最短路径
4.3 习题
3.1 最长不降子序列
(1)问题描述
设有由n个不相同的整数组成的数列,记为:
a(1)、a(2)、……、a(n)且a(i)a(j) (ij)
例如3,18,7,14,10,12,23,41,16,24.
若存在i1=w[i] 1f[i] then f[i]:=t
end;
writeln(f[m]);
end.
3.3 最短路径
问题描述:
如图:求v1到v10的最短路径长度及最短路径.
图的邻接矩阵如下:
0 2 5 1 -1 -1 -1 -1 -1 -1
-1 0 -1 -1 12 14 -1 -1 -1 -1
-1 -1 0 -1 6 10 4 -1 -1 -1
-1 -1 -1 0 13 12 11 -1 -1 -1
-1 -1 -1 -1 0 -1 -1 3 9 -1
-1 -1 -1 -1 -1 0 -1 6 5 -1
-1 -1 -1 -1 -1 -1 0 -1 10 -1
-1 -1 -1 -1 -1 -1 -1 0 -1 5
-1 -1 -1 -1 -1 -1 -1 -1 0 2
-1 -1 -1 -1 -1 -1 -1 -1 -1 0
采用逆推法
设f(x)表示点x到v10的最短路径长度
则 f(10)=0
f(x)=min{ f(i)+a[x,i] 当a[x,i]>0 ,x
求由n个整数构成的的数列的子数列最大的和,并记录子数列的首尾元素位置 这种acm题怎么解?思路是什么?动态规划吗?
荷塘清趣1年前1
hongtu110 共回答了17个问题 | 采纳率88.2%
设sum为最大总和,tem为目前统计总和,a为首,b为末.b++遍历数列,非负加上.负数若加上大于目前统计综合,则a设为后面遇到的第一个非负数,tem置零,b从a开始遍历.
多阶段决策问题一定有解吗?动态规划一定能求出最优解吗?
多阶段决策问题一定有解吗?动态规划一定能求出最优解吗?
多阶段决策问题解的存在条件是什么?怎么证明解的存在性和唯一性?动态规划一定能求出全局最优解吗?
lj1472583691年前1
行走人间的行走 共回答了15个问题 | 采纳率93.3%
多阶段决策问题不一定有解.
动态规划不一定能求出最优解.
存在全局最优解的条件很苛刻.
存在局部最优解是必要条件,但不是充分条件.
acm 动态规划题 求帮助理解题意
acm 动态规划题 求帮助理解题意
大概题目是,给你一些体积不等的物体,你要把它们装到包里,求最少可以使用几个包?
题目很简单,但老师给的思路是:先找到体积最大的,然后找体积最小的,再把它们放到一个包里。
请问为什么要这样做?为什么不是:把体积排序,然后依次从小的开始取放到包里,直到塞不下?
深谷秋色1年前1
キ呀呀的 共回答了18个问题 | 采纳率88.9%
先找到体积最大的,然后找体积最小的 这个貌似是贪婪算法的思想吧。
动态规划,是按状态来的。考虑了所有组合的。
数列取数问题,感觉可以用动态规划做,求具体思路,最好的O(n)的时间算法
数列取数问题,感觉可以用动态规划做,求具体思路,最好的O(n)的时间算法
一个全是正数的数列,现在要从里面选出一些数字使之和最大,取数的规则只有一个:不能连续取两个相邻的数,可以跳一个取或跳两个取。比如1,5,1,1,3,那么应该取5,3.
yunxin03111年前1
biner000 共回答了17个问题 | 采纳率94.1%
你这题目有问题。 又没有说取出几个数来。
按你的例子,应该取出5,1,3出来,和=9,而不是8
分治算法和动态规划有什么不同和联系?
LHC22001年前1
顶楼小猫 共回答了14个问题 | 采纳率85.7%
1. 分治法与动态规划主要共同点:
二者都要求原问题具有最优子结构性质,都是将原问题分而治之,分解成若干个规模较小(小到很容易解决的程序)的子问题.然后将子问题的解合并,形成原问题的解.

2. 分治法与动态规划实现方法:
① 分治法通常利用递归求解.
② 动态规划通常利用迭代法自底向上求解,但也能用具有记忆功能的递归法自顶向下求解.

3. 分治法与动态规划主要区别:
① 分治法将分解后的子问题看成相互独立的.
② 动态规划将分解后的子问题理解为相互间有联系,有重叠部分.
动态规划两个背包问题的状态转移方程,我就想问一下这两个方程为什么不同之处在于一个是v从cost到V,而另一个是与之相反的

动态规划两个背包问题的状态转移方程,我就想问一下这两个方程为什么不同之处在于一个是v从cost到V,而另一个是与之相反的呢 这里想不太明白 求教


zxjterry1年前1
lpsboy789 共回答了13个问题 | 采纳率92.3%
很明显,01是用了滚动数组的原理把二维数组简化为一维数组了,v to cost就是为了放过的物品不再重复放,你可以自己按步骤把数组没一次的改变列出来,就一目了然了。而完全背包物品时可以重复方的,所以循环与01相反,推荐你去看看背包九讲