传送门:https://www.luogu.org/problem/P2066
这道题对我这种蒟蒻来说还是太难了
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,m; 4 int plat[20][20]; 5 int dp[20][20];//前i个公司,放j个机器,最大放法 6 int path[20][20][20];//前i个公司,放j个机器,第k个公司放多少个 7 inline int read() 8 { 9 int x=0,f=1;char ch=getchar(); 10 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} 11 while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();} 12 return x*f; 13 } 14 int main() 15 { 16 n=read(),m=read(); 17 for(int i=1;i<=n;i++) 18 { 19 for(int j=1;j<=m;j++) 20 { 21 plat[i][j]=read(); 22 } 23 } 24 for(int i=1;i<=n;i++) 25 { 26 for(int j=0;j<=m;j++) 27 { 28 for(int k=0;k<=j;k++) 29 { 30 if(dp[i][j]<=dp[i-1][j-k]+plat[i][k]) 31 { 32 dp[i][j]=dp[i-1][j-k]+plat[i][k]; 33 for(int x=1;x<i;x++) 34 { 35 path[i][j][x]=path[i-1][j-k][x]; 36 } 37 path[i][j][i]=k; 38 } 39 } 40 } 41 } 42 cout<<dp[n][m]<<endl; 43 for(int i=1;i<=n;i++)cout<<i<<" "<<path[n][m][i]<<endl; 44 }