題目傳送門
【題目大意】
給乙個n邊形,每個頂點上有乙個數值,每條邊上有乙個運算符號。每次刪去一條邊,同時將這條邊連線的兩端點的數值進行運算(運算符號記為這條邊上的符號),求刪去所有邊後的最大值。
【思路分析】
首先斷環為鏈,然後就跟石子合併是差不多的了,不過因為涉及到乘法並且有負數,所以dp過程中除了記錄最大值還要記錄最小值,詳見**。
【**實現】
1 #include2 #include3**戳這裡#define rg register
4#define go(i,a,b) for(rg int i=a;i<=b;i++)
5using
namespace
std;
6const
int n=102;7
const
int inf=1e9+9;8
int n,m,a[n],f[n][n],g[n][n],ans=-inf;
9char
b[n];
10int
main()
13 go(i,1,m) go(j,1,m) f[i][j]=-inf,g[i][j]=inf;
14 go(i,1,m) f[i][i]=g[i][i]=a[i];
15 go(len,2
,n)16 go(l,1,m-len+1)17
26else
2731}32
}33 go(i,1,n) ans=max(ans,f[i][i+n-1
]);34 printf("
%d\n
",ans);
35 go(i,1,n) if(f[i][i+n-1]==ans) printf("
%d "
,i);
36return0;
37 }
luogu P4310 絕世好題
題面傳送門 這道d pdp dp還是比較水的 首先考慮設f if i fi 為以a ia i ai 結尾的最長長度,則向前迴圈列舉找到適合的轉移就可以了,時間複雜度o n 2 o n 2 o n2 估計80 8080 分正解也不是很難想,因為這是位運算,所以我們要找到位運算的性質,的性質就是兩個數至...
luogu P4310 絕世好題
題面傳送門 這道 dp 還是比較水的 首先考慮設 f i 為以 a i 結尾的最長長度,則向前迴圈列舉找到適合的轉移就可以了,時間複雜度 o n 2 估計 80 分 正解也不是很難想,因為這是位運算,所以我們要找到位運算的性質,的性質就是兩個數至少有乙個相同位置同為 1 那麼只要列舉位置轉移就好了,...
luoguP3708 koishi的數學題
題目鏈結 樣例解釋01 1111 1111 0022 2222 2201 0333 3333 0010 4444 4401 2105 5555 0002 1066 6601 1321 0777 0020 3210 8801 0143 2109 0012 0432 10很顯然橫行相加就是每個答案,然而...