P2066 机器分配

传送门: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 }

 

posted @ 2019-10-16 21:11  nono_ttaa  阅读(209)  评论(0编辑  收藏  举报