cdoj 1131 男神的礼物 区间dp
生活随笔
收集整理的這篇文章主要介紹了
cdoj 1131 男神的礼物 区间dp
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
男神的禮物
Time Limit: 20 Sec
Memory Limit: 256 MB
題目連接
http://acm.uestc.edu.cn/#/problem/show/1131
Description
Lweb學(xué)長(zhǎng)是集訓(xùn)隊(duì)里公認(rèn)的男神。有一天他要給美美的學(xué)姐姐準(zhǔn)備禮物。Lweb學(xué)長(zhǎng)可是會(huì)魔法的喲。為了準(zhǔn)備一份禮物,男神要加工n份材料。每一次只能加工相鄰的材料。
當(dāng)男神加工兩個(gè)魔法值為a,b的材料,男神都要消耗a*b的體力,同時(shí)在這個(gè)地方合成出魔法值(a+b)0的材料。
男神為了能節(jié)省體力來(lái)完成他的禮物。想找聰明的你幫他算一算他所要花費(fèi)的最小體力。
Input
第一行一個(gè)整數(shù)T,表示男神所要準(zhǔn)備的禮物數(shù)。 之后的T組數(shù)據(jù)各有兩行數(shù)據(jù),第一行有一個(gè)整數(shù)n,表示這份禮物的材料數(shù)(1<=n<=100)。 接下來(lái)一行有n個(gè)整數(shù)a(0<=a<100),表示這件禮物第i份材料的魔法值。Output
每組數(shù)據(jù)一行輸出,表示男神制作這份禮物所要的最小體力。
Sample Input
2
2
18 19
3
40 60 20
Sample Output
342
2400
HINT
對(duì)于樣例 2:
先加工材料40和60,得到0的材料,消耗40?60體力,共消耗2400體力;
再加工材料0和20,得到20的材料,消耗0?20體力,共消耗2400體力.
題意
?
?
題解:
區(qū)間dp,類似于石子合并的問(wèn)題,每次每枚舉合并的點(diǎn)就好了
代碼:
?
//qscqesze #include <cstdio> #include <cmath> #include <cstring> #include <ctime> #include <iostream> #include <algorithm> #include <set> #include <vector> #include <sstream> #include <queue> #include <typeinfo> #include <fstream> #include <map> #include <stack> typedef long long ll; using namespace std; //freopen("D.in","r",stdin); //freopen("D.out","w",stdout); #define sspeed ios_base::sync_with_stdio(0);cin.tie(0) #define maxn 200001 #define mod 10007 #define eps 1e-9 int Num; char CH[20]; const int inf=0x7fffffff; //нчоч╢С /*inline void P(int x) {Num=0;if(!x){putchar('0');puts("");return;}while(x>0)CH[++Num]=x%10,x/=10;while(Num)putchar(CH[Num--]+48);puts(""); } */ inline ll read() {int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f; } inline void P(int x) {Num=0;if(!x){putchar('0');puts("");return;}while(x>0)CH[++Num]=x%10,x/=10;while(Num)putchar(CH[Num--]+48);puts(""); } //************************************************************************************** ll dp[101][101]; ll a[101]; ll sum[101]; int main() {int t=read();while(t--){memset(dp,0,sizeof(dp));memset(sum,0,sizeof(sum));int n=read();for(int i=1;i<=n;i++){a[i]=read();sum[i]=a[i]+sum[i-1];}for(int r=2;r<=n;r++){for(int i=r-1;i>=1;i--){for(int j=i;j<=r;j++){ll kiss=((sum[j]-sum[i-1])%100)*((sum[r]-sum[j])%100);if(dp[i][r]==0)dp[i][r]=dp[i][j]+dp[j+1][r]+kiss;elsedp[i][r]=min(dp[i][r],dp[i][j]+dp[j+1][r]+kiss);}}}cout<<dp[1][n]<<endl;} }?
總結(jié)
以上是生活随笔為你收集整理的cdoj 1131 男神的礼物 区间dp的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python中xrange和range异
- 下一篇: HDU - 4734 F(x) (20