[luogu 2066] 機器分配{區間dp}
阿新 • • 發佈:2018-12-08
題目
https://www.luogu.org/problemnew/show/P2066
解題思路
設 表示前 個公司分配了 個裝置的最大值,用 記錄路徑——即每次最大的 。動態轉移方程為 ,輸出最小字典序的時候,可以倒著減去當前的裝置數量即可,
程式碼
#include<cstdio>
#define rfor(i,x,y) for (register int i=x;i<=y;++i)
#define rfo(i,x,y) for (register int i=x;i>=y;--i)
int f[101],t[101][101],n,m,sum[101][101];
int main()
{
scanf("%d%d",&n,&m);
rfor(i,1,n) rfor(j,1,m) scanf("%d",&t[i][j]);
rfo(i,n,1) rfo(j,m,1) rfor(k,1,j)
if (f[j-k]+t[i][k]>f[j]) {f[j]=f[j-k]+t[i][k]; sum[i][j]=k;}
printf("%d\n",f[m]);
for (register int i=1,j=m;i<=n;putchar(10),i++)
printf("%d %d",i,sum[i][j]),j-=sum[i][j];
}