日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JZOJ 5263. 【NOIP2017模拟8.12A组】分手是祝愿

發布時間:2025/3/15 编程问答 10 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JZOJ 5263. 【NOIP2017模拟8.12A组】分手是祝愿 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Description

Input

Output

Sample Input

2
2
15 19
3
30 40 20

Sample Output

285
2600

Data Constraint

Solution

  • 這題我用的是動態規劃的解法(用類似分治的 DFS 過程實現)。

  • F[l][r] 表示將 [lr] 這段區間的材料全部合并、變成一份材料的最小花費。

  • 再設 G[l][r] 表示將 [lr] 這段區間的材料全部合并成一份材料其魔力值。

  • 那么遞歸時,若 F[l][r]>=0 ,說明之前已處理過這個區間,可以直接退出(記憶化)。

  • 否則我們枚舉 ilir 分別遞歸 [l,i][i+1,r] 兩個小區間,再合并大的區間。

  • 可以得出轉移方程式:

    F[l][r]=Min{G[l][i]?G[i+1][r]+F[l][i]+F[i+1][r]}

  • 若成功轉移,則也要更新 G[l][r] 的值:

    g[l][r]=(g[l][i]+g[i+1][r])%100

  • 那么最終答案即為 F[1][N] ,時間復雜度 O(N3)

Code

#include<cstdio> #include<cstring> using namespace std; const int N=101; int f[N][N],g[N][N]; inline int read() {int X=0,w=1; char ch=0;while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();}while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();return X*w; } inline int dfs(int l,int r) {if(f[l][r]>=0) return f[l][r];for(int i=l;i<r;i++){int x=dfs(l,i),y=dfs(i+1,r);if(f[l][r]<0 || x+y+g[l][i]*g[i+1][r]<f[l][r]){f[l][r]=g[l][i]*g[i+1][r]+x+y;g[l][r]=(g[l][i]+g[i+1][r])%(N-1);}}return f[l][r]; } int main() {int T=read();while(T--){int n=read();memset(f,-1,sizeof(f));for(int i=1;i<=n;i++) g[i][i]=read(),f[i][i]=0;printf("%d\n",dfs(1,n));}return 0; }

總結

以上是生活随笔為你收集整理的JZOJ 5263. 【NOIP2017模拟8.12A组】分手是祝愿的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。