題面:
給定乙個 n * v 的矩陣
要求從第一行走到第f行,每行取走乙個數,
且該行所取的數必須必上一行所取的數的列數大 , 求所能取走的最大值
注意每一行所取走的數字的列數必須大於等該行的行號
因為必須給前面的花留下足夠的花瓶
由此我們便可以很容易的得出狀態轉移方程
dp [ i ] [ j ] = max ( dp [ i-1 ] [ k ] ) + d [ i ] [ j ] ( k < j )
dp [ i ] [ j ] = max ( dp [ i-1 ] [ k ] ) + d [ i ] [ j ] ( k < j )
dp [ i ] [ j ] = max ( dp [ i-1 ] [ k ] ) + d [ i ] [ j ] ( k < j )其中dp [ i ] [ j ] 表示從第一行走到第 i 行並取走該行第j個數所能取得的最大值
①用字串陣列保留方案
設定string陣列 an [ i ] [ j ] , 在dp陣列轉移狀態時也一起轉移
我們知道string是可以直接相加的,那麼轉移的時候如果繼承上乙個狀態更優
那字元陣列就由上乙個狀態加上這次的選擇,也就是
if(dp[i-1][q]+a[i][j]>dp[i][j])完整**
#include usingview codenamespace
std;
intn,m;
int a[109][109
];int dp[109][109
];string an[109][109
];string zhuan(int
s)
for(int i=k.length()-1;i>=0;i--)
q+=k[i];
q+='-'
;
returnq;}
intmain()
//第i種花放在j位置
for(int i=1;i<=m;i++) dp[1][i]=a[1][i],an[1][i]=zhuan(i);
int maxn=0
;
for(int i=2;i<=n;i++)}}
}intnum;
for(int i=1;i<=m;i++)
}cout
for(int i=0;i)
}
②用 int 陣列儲存方案
同樣的,定義pre [ i ] [ j ] 為讓 dp [ i ] [ j ] 最大時上乙個狀態選的什麼
初始化沒有上乙個狀態,所以指向自己
for(int i=1;i<=m;i++) dp[1][i]=a[1][i],pre[1][i]=i;然後我們和dp陣列一起轉移就是了
輸出方案的時候一路倒推回去
int ans[109],cnt=n;二、跑dijtls最長路(懂什麼意思就行,錯是肯定寫錯了)ans[n]=num;//
最後乙個pre記錄不到,手動輸入
while(pre[cnt][num]!=num)
for(int i=1;i<=n;i++)
cout
";
暫時不是很懂,先貼下別人**。
//view code樓下全是dp,那麼來個最長路做法
////
那麼我們就可以連邊去跑最長路了
//同時我們注意到需要記錄路徑
//那麼這裡就選dij好了(因為其他的不會記路徑啊)
#include#include
#include
#include
#pragma gcc optimize(3)
#define re register
#define maxn 10001
#define maxw 800000
#define inf -99999999
using
namespace
std;
struct
node
e[maxw];
int f,v,ans,num=1
,end;
inthead[maxn],d[maxn],r[maxn];
int a[101][101
];typedef pair
pii;
priority_queue
,less>q;
inline
intread()
while(c>='
0'&&c<='9'
)
return r*x;
}inline
void add_edge(int x,int y,int
z)inline
void dijkstra(int
s) }
}void dfs(int
i)int
main()
cout
dfs(r[end]);
end%=v;
if(end==0) end=v;
cout
return0;
}
花店櫥窗布置
題目描述 某花店現有f束花,每一束花的品種都不一樣,同時至少有同樣數量的花瓶,被按順序擺成一行,花瓶的位置是固定的,從左到右按1到v順序編號,v是花瓶的數目。花束可以移動,並且每束花用1到f的整數標識。如果i j,則花束i必須放在花束j左邊的花瓶中。例如,假設杜鵑花的標識數為1,秋海棠的標識數為2,...
花店櫥窗布置
不就是插花嗎?求出動態轉移方程,很容易啊。直接列出動態轉移方程。b i j max b i j b i 1 k 1 a i k i 1.f j i.v f i k i.j include include define r i,a,b for int i a i b i using namespace...
花店櫥窗布置 DP
由 分析可以得知,這道題的擺放方案需要滿足 每行只選乙個數 美學值 且相鄰的兩行後一行的花瓶標號要大於前一行。那麼問題就轉換為了 在乙個數字 中,要求計算一條從頂至底的路徑,使得所經過的數字之和最大,且相鄰兩行中,後一行的列數要大於前一行。現在這道題和數塔問題很相似了,可以模擬求解。include ...