| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
100题1A留念,排序 +多重背包79MS贴代码#include<iostream>
#include<cstring>
using namespace std;
bool dp[40001];
int count[40001];
int n,h[401],a[401],c[401];
int Sort(int *a,int left,int right)
{
int temp=a[left];
int H=h[left];
int C=c[left];
while(left<right)
{
while(a[right]>temp&&left<right)
right--;
if(left<right)
{
a[left]=a[right];
h[left]=h[right];
c[left]=c[right];
left++;
}
while(a[left]<temp&&left<right)
left++;
if(left<right)
{
a[right]=a[left];
h[right]=h[left];
c[right]=c[left];
right--;
}
}
a[left]=temp;
h[left]=H;
c[left]=C;
return left;
}
void QuickSort(int *a,int left,int right)
{
int q;
if(left<right)
{
q=Sort(a,left,right);
QuickSort(a,left,q-1);
QuickSort(a,q+1,right);
}
}
int main()
{
cin>>n;
int i,j;
for(i=1;i<=n;i++)
cin>>h[i]>>a[i]>>c[i];
QuickSort(a,1,n);
memset(dp,0,sizeof(dp));
dp[0]=1;
for(i=1;i<=n;i++)
{
memset(count,0,sizeof(count));
for(j=h[i];j<=a[i];j++)
{
if(dp[j-h[i]]&&count[j-h[i]]<c[i]&&!dp[j])
{
dp[j]=1;
count[j]=count[j-h[i]]+1;
}
}
}
for(i=a[n];i>=0;i--)
if(dp[i])
break;
cout<<i<<endl;
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator