JZOJ 3413. 【NOIP2013模拟】KC的瓷器
题目
分析
-
显然DP
- 预处理每行选j个的答案
代码
1 #include <cmath> 2 #include <cstdio> 3 #include <cstring> 4 #include <iostream> 5 #include <algorithm> 6 #define ll long long 7 using namespace std; 8 int a[120][120],f[120][10001],sum1[120][120],sum2[120][120],d[120][120]; 9 10 int main() 11 { 12 int n,m; 13 cin>>n>>m; 14 for (int i=1,x;i<=n;i++) 15 { 16 cin>>a[i][0]; 17 a[i][110]=a[i-1][110]+a[i][0]; 18 for (int j=1;j<=a[i][0];j++) 19 { 20 cin>>a[i][j]; 21 sum1[i][j]=sum1[i][j-1]+a[i][j]; 22 } 23 for (int j=a[i][0],k=1;j>=1;j--,k++) 24 sum2[i][k]=sum2[i][k-1]+a[i][j]; 25 } 26 for (int i=1;i<=n;i++) 27 for (int j=1;j<=min(a[i][0],m);j++) 28 for (int k=0;k<=j;k++) 29 d[i][j]=max(d[i][j],sum1[i][k]+sum2[i][j-k]); 30 for (int i=1;i<=n;i++) 31 for (int j=1;j<=a[i][110];j++) 32 for (int k=0;k<=min(a[i][0],j);k++) 33 f[i][j]=max(f[i][j],f[i-1][j-k]+d[i][k]); 34 cout<<f[n][m]; 35 return 0; 36 }
为何要逼自己长大,去闯不该闯的荒唐