QUSTOJ1784 C 机器分配(DP)
2016-07-23 15:51
204 查看
题目给出矩阵是s[i][j]代表第i个公司分配j台机器的收益,因此可以设f[i][j]为i个公司分配j台机器的最大总收益,枚举k,f[i][j]可以取i-1个公司分配k台机器的最大受益加上第i个公司分配j-k台机器的和的最大值。
这不是区间动归??……
这是代码:
#include <bits/stdc++.h>
using namespace std;
int m,n,s[1001][1001],f[1001][1001];
void init()
{
int i,j;
scanf("%d %d",&m,&n);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
scanf("%d",&s[i][j]);
}
void solve()
{
int i,j,k,x;
for(i=1;i<=n;i++)
for(j=0;j<=m;j++)
for(k=0;k<=j;k++)
{
x=f[i-1][k]+s[i][j-k];
f[i][j]=max(f[i][j],x);
}
printf("%d",f
[m]);
}
int main()
{
init();
solve();
return 0;
}
这不是区间动归??……
这是代码:
#include <bits/stdc++.h>
using namespace std;
int m,n,s[1001][1001],f[1001][1001];
void init()
{
int i,j;
scanf("%d %d",&m,&n);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
scanf("%d",&s[i][j]);
}
void solve()
{
int i,j,k,x;
for(i=1;i<=n;i++)
for(j=0;j<=m;j++)
for(k=0;k<=j;k++)
{
x=f[i-1][k]+s[i][j-k];
f[i][j]=max(f[i][j],x);
}
printf("%d",f
[m]);
}
int main()
{
init();
solve();
return 0;
}
相关文章推荐
- ISO12233分辨率测试卡的使用方法
- 【转】C#程序打包安装部署之添加注册表项
- 共享锁(S锁)和排它锁(X锁)
- [HDU 2222] Keywords Search [AC自动机]
- POJ 3450 Corporate Identity(kmp求多个字符串的最长公共子串)
- 线程安全和线程同步Synchronized
- constantize()函数
- Graham求凸包
- wireshark捕获/过滤指定ip地址数据包
- 非空子集个数
- POJ 1611 The Suspects
- 【bzoj3611】 大工程
- Netty解决半包(TCP粘包/拆包导致)读写问题
- 【转】C# Winform打包部署时添加注册表信息实现开机启动
- codeforces #364c They Are Everywhere 尺取法
- hdu 5738 多校2 Eureka 【几何计数】
- 001-字符串最后一个单词的长度
- C++ Primer 笔记(2)第二章 变量与基本类型
- java动态代理汇总
- 如何把某个元素移除你的视线