来自本人百度空间 2010-10-21 20:47
#include<iostream>
using namespace std;
int n,c;
int m[21][2];
int main()
{
int i,j;
cin>>n>>c;
for (i=1;i<=n;i++)
cin>>m[i][1]>>m[i][0];
for (i=1;i<n;i++)
for (j=i+1;j<=n;j++)
if (m[i][1]>m[j][1])
{
swap(m[i][1],m[j][1]);
swap(m[i][0],m[j][0]);
}
int ans=0,p=1,sum;
while (p)
{
sum=0;
for (i=n;i>=1;i--)
while (sum+m[i][1]<=c&&m[i][0]>0)
{
sum+=m[i][1];
m[i][0]--;
}
if (sum<c)
{
for (i=1;i<=n;i++)
if (m[i][0]>0&&sum<c)
do
{
sum+=m[i][1];
m[i][0]--;
}while (sum<c&&m[i][0]>0);
if (sum>=c) ans++;
else p=0;
}
else ans++;
}
cout<<ans<<endl;
return 0;
}