HDU 2844
#include<bits/stdc++.h>
using namespace std;
int a[100005];
int c[100005];
int dp[100005];
int f[100005];
int main()
{
int n,m;
while(cin>>n>>m)
{
if(n==0&&m==0)return 0;
memset(a,0,sizeof(a));
memset(c,0,sizeof(c));
memset(f,0,sizeof(f));
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(int i=1;i<=n;i++)
{
scanf("%d",&c[i]);
}
int ans=0;
f[0]=1;
for(int i=1;i<=n;i++)
{
memset(dp,0,sizeof(dp));
for(int j=a[i];j<=m;j++)
{
if(dp[j-a[i]]<c[i]&&!f[j]&&f[j-a[i]])
{
dp[j]=dp[j-a[i]]+1;
f[j]=1;
ans++;
}
}
/*for(int k=0;k<=m;k++)
{
cout<<dp[k]<<" ";
}
cout<<endl;
for(int k=0;k<=m;k++)
{
cout<<f[k]<<" ";
}
cout<<endl<<endl;*/
}
cout<<ans<<endl;
}
return 0;
}
hdu 2195
#include<bits/stdc++.h>
using namespace std;
int a[110];
int b[110];
int dp[110][110];
int main()
{
int n,m,k,s,K;
while(cin>>n>>m>>K>>s)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(dp,0,sizeof(dp));
for(int i=0;i<K;i++)
{
scanf("%d%d",&a[i],&b[i]);
}
int flag=0;
for(int i=1;i<=m;i++)
{
for(int j=0;j<K;j++)
for(int k=1;k<=s;k++)
if(b[j]<=i)
dp[i][k]=max(dp[i][k],dp[i-b[j]][k-1]+a[j]);
if(dp[i][s]>=n)
{
cout<<m-i<<endl;
flag=1;
break;
}
}
if(!flag)cout<<-1<<endl;
}
return 0;
}