codeforce 189A 完全背包之必须装满问题
2014-04-01 21:22
330 查看
http://codeforces.com/problemset/problem/189/A
A. Cut Ribbon
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
Polycarpus has a ribbon, its length is n. He wants to cut the ribbon in a way that fulfils the following two conditions:
After the cutting each ribbon piece should have length a, b or c.
After the cutting the number of ribbon pieces should be maximum.
Help Polycarpus and find the number of ribbon pieces after the required cutting.
Input
The first line contains four space-separated integers n, a, b and c (1 ≤ n, a, b, c ≤ 4000) —
the length of the original ribbon and the acceptable lengths of the ribbon pieces after the cutting, correspondingly. The numbers a, b and c can
coincide.
Output
Print a single number — the maximum possible number of ribbon pieces. It is guaranteed that at least one correct ribbon cutting exists.
Sample test(s)
input
output
input
output
Note
In the first example Polycarpus can cut the ribbon in such way: the first piece has length 2, the second piece has length 3.
In the second example Polycarpus can cut the ribbon in such way: the first piece has length 5, the second piece has length 2.
这个是完全背包里面的必须装满的一类问题,注意和不必须装满的区别,代码上有区别~~
#include <iostream>
using namespace std;
const int INF=1e9;
int f[4444];
int n,m;
int a[4];
int main()
{
cin>>n>>a[0]>>a[1]>>a[2];
for (int i=1; i<=n; i++) f[i]=-INF;//区别一
f[0]=0;
for (int i=0; i<=2; i++)
{
for (int j=0; j<=n-a[i]; j++)
{
if (f[j]!=-INF)//区别二
{
f[j+a[i]]=max(f[j+a[i]],f[j]+1);
}
}
}
cout<<f
<<endl;
return 0;
}
A. Cut Ribbon
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
Polycarpus has a ribbon, its length is n. He wants to cut the ribbon in a way that fulfils the following two conditions:
After the cutting each ribbon piece should have length a, b or c.
After the cutting the number of ribbon pieces should be maximum.
Help Polycarpus and find the number of ribbon pieces after the required cutting.
Input
The first line contains four space-separated integers n, a, b and c (1 ≤ n, a, b, c ≤ 4000) —
the length of the original ribbon and the acceptable lengths of the ribbon pieces after the cutting, correspondingly. The numbers a, b and c can
coincide.
Output
Print a single number — the maximum possible number of ribbon pieces. It is guaranteed that at least one correct ribbon cutting exists.
Sample test(s)
input
5 5 3 2
output
2
input
7 5 5 2
output
2
Note
In the first example Polycarpus can cut the ribbon in such way: the first piece has length 2, the second piece has length 3.
In the second example Polycarpus can cut the ribbon in such way: the first piece has length 5, the second piece has length 2.
这个是完全背包里面的必须装满的一类问题,注意和不必须装满的区别,代码上有区别~~
#include <iostream>
using namespace std;
const int INF=1e9;
int f[4444];
int n,m;
int a[4];
int main()
{
cin>>n>>a[0]>>a[1]>>a[2];
for (int i=1; i<=n; i++) f[i]=-INF;//区别一
f[0]=0;
for (int i=0; i<=2; i++)
{
for (int j=0; j<=n-a[i]; j++)
{
if (f[j]!=-INF)//区别二
{
f[j+a[i]]=max(f[j+a[i]],f[j]+1);
}
}
}
cout<<f
<<endl;
return 0;
}
相关文章推荐
- HDU 1114 又见完全背包问题(必须装满)
- qduoj 分辣条2(完全背包,装满问题)
- HDU1114(完全背包装满问题)
- 背包问题——“01背包”及“完全背包”装满背包的方案总数分析及实现
- HDU-1114 完全背包+恰好装满问题
- 背包问题---01背包|完全背包(装满背包的方案总数分析及实现)
- POJ---1384Piggy-Bank (完全背包+装满问题)
- 挑战程序设计竞赛 多重部分和问题(恰好装满的完全背包)
- hdu 1114需要装满的完全背包 重点是背包初始化的问题
- 背包问题---01背包|完全背包(装满背包的方案总数分析及实现)
- hdu 1114 Piggy-Bank(必须装满的完全背包)
- HDU 1114 Piggy-Bank(完全背包问题)【完全背包--刚好装满 模板】
- DP背包问题小结(01背包,完全背包,需恰好装满或不需,一维DP、二维DP)
- 完全背包问题
- 蓝桥杯——说好的进阶之完全背包问题
- 动态规划之完全背包问题杭电1114
- 背包问题:01 完全 多重
- 背包问题总结(0-1背包+完全背包+多重背包)
- 背包九讲笔记-完全背包问题
- 背包问题——完全背包