code vs 1966 乘法遊戲

2021-07-09 18:08:32 字數 1106 閱讀 3017

時間限制: 1 s

空間限制: 128000 kb

題目等級 : ** gold

題解

檢視執行結果

乘法遊戲是在一行牌上進行的。每一張牌包括了乙個正整數。在每乙個移動中,玩家拿出一張牌,得分是用它的數字乘以它左邊和右邊的數,所以不允許拿第1張和最後1張牌。最後一次移動後,這裡只剩下兩張牌。

你的目標是使得分的和最小。

例如,如果數是10 1 50 20 5,依次拿1、20、50,總分是           

10*1*50+50*20*5+10*50*5=8000

而拿50、20、1,總分是1*50*20+1*20*5+10*1*5=1150。

輸入描述 input description

輸入檔案的第一行包括牌數(3<=n<=100),第二行包括n個1-100的整數,用空格分開。 

輸出描述 output description

輸出檔案只有乙個數字:最小得分

樣例輸入 sample input

610 1 50 50 20 5

樣例輸出 sample output

3650

此題屬於區間dp,第一眼看感覺跟石子合併有點像,於是就按照那種方式編寫。但是除錯的過程中發現會出現負值,應該是資料超範圍了,所以發現考慮不周。經大神指點發現沒有特殊處理f[i][i+1]的情況,相鄰兩個無法運算所以很顯然應該是0,但是如果不初始化就會是最大值,那麼很顯然會錯。但是貌似還是不對,於是發現題意理解有誤。唉,於是重新寫,就寫成了這個樣子。

#include#include#include#includeusing namespace std;

int i,j,k,n,m;

int num[110],f[110][110];

using namespace std;

int main()

for (i=1;i<=n-1;i++)

f[i][i+1]=0;

for (i=2;i<=n;i++)

}/*for (i=1;i<=n-1;i++)

*/printf("%d",f[1][n]);

return 0;

}

Codevs 1966 乘法遊戲

1966 乘法遊戲 時間限制 1 s 空間限制 128000 kb 題目等級 gold 題目描述 description 乘法遊戲是在一行牌上進行的。每一張牌包括了乙個正整數。在每乙個移動中,玩家拿出一張牌,得分是用它的數字乘以它左邊和右邊的數,所以不允許拿第1張和最後1張牌。最後一次移動後,這裡只...

codevs 卡片遊戲

題目描述 description 桌面上有一疊牌,從第一張牌 即位於頂面的牌 開始從上往下依次編號為1 n.當至少還剩兩張排時進行一下操作 把第一張牌扔掉,然後把新的第一張牌放到整疊牌的最後。輸入n。輸出每次扔掉的牌,以及最後剩下的牌。分析 說是費用流的題目,但是直接用陣列暴力模擬就過了。var t...

乘法遊戲題解

乘法遊戲是在一行牌上進行的。每一張牌包括了乙個正整數。在每乙個移動中,玩家拿出一張牌,得分是用它的數字乘以它左邊和右邊的數,所以不允許拿第1張和最後1張牌。最後一次移動後,這裡只剩下兩張牌。你的目標是使得分的和最小。例如,如果數是10 1 50 20 5,依次拿1 20 50,總分是 10150 5...