時間限制: 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...