您的位置:首页 > 其它

HDU 1059 Dividing

2012-08-31 10:20 260 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1059

很弱....时间是750ms....

View Code

#include <iostream>
#define n 7
#define maxn 125005
using namespace std;
int main()
{
long t=0, i, j, l, sum, ans[maxn], v
, num
, m;
while(1)
{
t++;
sum = 0;
for(i = 1; i < n; i++)
{
cin >> num[i];
v[i] = i;
sum += v[i]*num[i];
}
if(sum == 0) break;
m = sum/2;
for(i = 0; i <= m; i++)
ans[i] = 0;
for(i = 1; i < n; i++)
{
if(v[i]*num[i] >= m )
{
for(j = 0; j <= m; j++)
if(j >= v[i] && ans[j-v[i]]+v[i] > ans[j])
ans[j] = ans[j-v[i]]+v[i];
}
else
{
for(j = 1; j < num[i];)
{
for(l = m; l >= j*v[i]; l--)
if(ans[l-j*v[i]]+j*v[i] > ans[l])
ans[l] = ans[l-j*v[i]]+j*v[i];
num[i] -= j;
j = j * 2;
}
for(l = m; l >= num[i]*v[i]; l--)
if(ans[l-num[i]*v[i]]+num[i]*v[i] > ans[l])
ans[l] = ans[l-num[i]*v[i]]+num[i]*v[i];
}
}
cout << "Collection #" << t << ":" << endl;
if(ans[m]*2 == sum && m*2 == sum ) cout << "Can be divided." << endl;
else cout << "Can't be divided." << endl;
cout << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: