[JZOJ P1291] [DP]添加括号
生活随笔
收集整理的這篇文章主要介紹了
[JZOJ P1291] [DP]添加括号
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
@kaike
傳送門
區(qū)間DP弄得我一臉懵
動態(tài)方程為f[i][j]=f[i][k]+f[k+1][j]+sum[i][j];
這題要求出最小中間和,并且要輸出方案
先預留出所有的中間和
設出一個最小值,記錄斷點所在的位置
用con[i][j]就表示從第i個到第j個中第一個括號的位置
輸出:
其中f[1][n]就是從1到n中間和
用遞推的方式輸出con[1][n]的?1 void cout1(int i,int j)
?
1 #include<iostream> 2 using namespace std; 3 long f[51][50001]; 4 int q1[51]; 5 int q2[51]; 6 int main() 7 { 8 int k,v,n; 9 int value,weight; 10 cin>>k>>v>>n; 11 for(int i=0;i<=k;i++) 12 for(int j=0;j<=v;j++) 13 f[i][j]=-99999999;//賦初值 14 f[1][0]=0;//當背包容量為0時,賦值0 15 for(int i=1;i<=n;i++)//枚舉背包 16 { 17 cin>>weight>>value; 18 for(int j=v;j>=weight;j--)//枚舉容量 19 { 20 for(int w=1;w<=k;w++)//枚舉k包 從1-k 21 { 22 q1[w]=f[w][j]; 23 q2[w]=f[w][j-weight]+value; 24 } 25 int h1=1,h2=1,h=0; 26 while(h<k) 27 { 28 h++; 29 if(q1[h1]>q2[h2]) { 30 f[h][j]=q1[h1]; 31 h1++; 32 } 33 else { 34 f[h][j]=q2[h2]; 35 h2++; 36 } 37 } 38 } 39 } 40 int ans=0; 41 for(int i=1;i<=k;i++) 42 ans+=f[i][v]; 43 cout<<ans<<endl; 44 return 0; 45 } 蠢哭?
轉(zhuǎn)載于:https://www.cnblogs.com/Kaike/p/6007334.html
《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的[JZOJ P1291] [DP]添加括号的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 行为类模式(八):状态(State)
- 下一篇: 表单相关