这题难道不能用贪心吗?

P2066 机器分配

能否给出证明呢?
by 早右昕 @ 2017-07-17 15:22:07


但局部最优解不一定是全局最优解吧
by 一念之间 @ 2017-07-20 08:50:11


这道题目经典的动态规划啊,因为满足无后效性原则,但是不能避免贪心算法的目光短浅的缺点。
by Hydra_ @ 2017-08-25 06:58:51


@[LKY2002](/space/show?uid=47638) 两台机器,两个分公司。 第一个分公司: 1台50,2台51 第二个分公司:1台1,2台233 显然全部给第二个啊
by 老K @ 2017-09-10 08:30:32


注意,矩阵是指第i个公司分配j台机器,不是第j台机器时的利润
by jtzhang @ 2018-03-11 09:54:36


你们要的贪心,过不了。```cpp #include<iostream> using namespace std; int n,m,a[11][16],gs[11],cp[11]; int main() { int max,rc,tot=0; cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>a[i][j]; for(int i=1;i<=m;i++) { max=-1; for(int j=1;j<=n;j++) { cp[j]=a[j][gs[j]+1]-a[j][gs[j]]; if(cp[j]>max) { max=cp[j]; rc=j; } } gs[rc]++; tot+=max; } cout<<tot<<endl; for(int i=1;i<=n;i++) cout<<i<<" "<<gs[i]<<endl; return 0; } ```
by zerrun @ 2018-07-24 11:06:18


重新发一遍 ```cpp #include<iostream> using namespace std; int n,m,a[11][16],gs[11],cp[11]; int main() { int max,rc,tot=0; cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>a[i][j]; for(int i=1;i<=m;i++) { max=-1; for(int j=1;j<=n;j++) { cp[j]=a[j][gs[j]+1]-a[j][gs[j]]; if(cp[j]>max) { max=cp[j]; rc=j; } } gs[rc]++; tot+=max; } cout<<tot<<endl; for(int i=1;i<=n;i++) cout<<i<<" "<<gs[i]<<endl; return 0; } ```
by zerrun @ 2018-07-24 11:06:40


|