http://acm.hdu.edu.cn/showproblem.php?pid=1171
//1305008 2009-04-24 17:36:03 Accepted 1171 2015MS 1260K 838 B C++ no way
//1305033 2009-04-24 17:42:02 Accepted 1171 796MS 760K 664 B C++ no way
#include<iostream>
#include<cmath>
using namespace std;
int outs[250002];
int main()


{
int n;
while(cin>>n && n>=0)//A test case starting with a negative integer terminates input
//and this test case is not to be processed 這句話讓我錯了很多次 ,值得注意

{
int i,j,k,s,N=0,t;
int w[51],num[51];
for(i=1;i<=n;i++)

{
scanf("%d%d",&w[i],&num[i]);
N += w[i] * num[i];
}
t = N/2; //取其一半

for(i=0;i<=N;i++)
outs[i] = 0;
for(i=0;i<=num[1];i++)
outs[i*w[1]] = 1;

for(i=2;i<=n;i++)

{
for(j=0;j<=t;j++)

{
for(k=0,s=0;s<=num[i] && k+j<=t; k+=w[i],s++)
if( outs[j] == 1)
outs[k+j] = 1;
}
}
for(i = t; i>=0 ;i--)
if(outs[i] !=0 )
break;
printf("%d %d\n",i + N-2*i ,i);
}
return 0;
}





















































我吐血了。。
if( n==-1 ) break; 讓我錯了WA了9次
太感謝你了
2
8 1
1 6
后輸出
7 7
這個算法有漏洞
// 我也TLE好久好久... 居然說是負數結束...
// 你說的這組數據我的程序會輸出 8 6; 寫的挺不好看的,不介意哈~~
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
int final[250001];
int temp[250001];
typedef struct
{
int v,m;
}node;
node value[50];
bool comp(node a, node b)
{
return a.m<b.m;
}
int main()
{
int n;
while(cin >> n && n>=0)
{
for(int i=0; i<n; i++)
scanf("%d%d",&value[i].v,&value[i].m);
sort(value,value+n,comp);
final[0] = 1;
int sum = 0,t_sum=0;
for(int i=0; i<n; i++)
{
sum += value[i].v * value[i].m;
t_sum = value[i].v * value[i].m;
for(int j=0; j<=sum-t_sum; j++)
{
int k=0;
while(k<=value[i].m)
{
temp[j+(k*value[i].v)] += final[j];
k++;
}
}
for(int i=0; i<=sum; i++)
{
final[i] = temp[i];
temp[i] = 0;
}
}
int i=sum/2,j=1;
while(1)
{
if(final[i-j])
{
cout << sum+j-i << " "
<< i-j << endl;
break;
}
if(final[i+j])
{
cout << i+j << " "
<< sum-i-j << endl;
break;
}
j++;
}
}
return 0;
}
for(j=0;j<=t;j++)
改成
for(j=t;j>=0;j--)