#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[100002];
int main()
{
int n;
while(cin>>n,n!=0)
{
int a[1200];
memset(dp,0,sizeof(dp));
int i;
for(i=0;i<n;i++)
{
cin>>a[i];
}
int m;cin>>m;
int v=m-5;
sort(a,a+n);
int j;
for(i=0;i<n-1;i++)
{
for(j=v;j>=a[i];j--)
{
if(dp[j]<dp[j-a[i]]+a[i])
{
dp[j]=dp[j-a[i]]+a[i];
}
}
}
int ans=m-dp[v]-a[n-1];
cout<<ans<<endl;
}
}
/**************************************
Problem id : SDUT OJ 2775
01背包
Result : Accepted
Take Memory : 900K
Take Time : 20MS
Submit Time : 2015-01-21 20:59:46
**************************************/
#include<iostream>
#include<cstring>
using namespace std;
int dp[10005];
struct node
{
int wi,vi;
}f[10002];
int main()
{
int n,v;
while(cin>>n>>v)
{
int i,j;
for(i=0;i<n;i++)
{
cin>>f[i].wi;
}
for(i=0;i<n;i++)
{
cin>>f[i].vi;
}
memset(dp,0,sizeof(dp));
for(i=0;i<n;i++)
{
for(j=f[i].vi;j<=v;j++)
{
if(dp[j]<dp[j-f[i].vi]+f[i].wi)
{
dp[j]=dp[j-f[i].vi]+f[i].wi;
}
}
}
cout<<dp[v]<<endl;
}
}
/**************************************
Problem id : SDUT OJ 2826
完全背包
Result : Accepted
Take Memory : 584K
Take Time : 250MS
Submit Time : 2015-01-21 18:54:26
**************************************/
#include<iostream>
#include<cstring>
using namespace std;
int dp[160];
int main()
{
int a[151],i,j,stan[100];
for(i=0;i<151;i++)
{
a[i]=i;
}
a[1]=0;
int t=0;
for(i=2;i<151;i++)
{
if(a[i]!=0)
{
stan[t++]=a[i];
for(j=i+i;j<151;j+=i)
{
a[j]=0;
}
}
}
int m=t;
int N;
cin>>N;
while(N--)
{
memset(dp,0,sizeof(dp));
dp[0]=1;
int n;cin>>n;
for(i=0;i<m;i++)
{
for(j=stan[i];j<=n;j++)
{
dp[j]+=dp[j-stan[i]];
}
}
cout<<dp[n]<<endl;
}
}
/**************************************
Problem id : SDUT OJ 2776
加法分解问题
Result : Accepted
Take Memory : 468K
Take Time : 0MS
Submit Time : 2015-01-21 20:39:00
**************************************/
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
string str1,str2;
int next0[1000005];
int qn(int n)
{
int i,k=0;
for(i=1;i<n;i++)
{
while(k>0&&str2[i]!=str2[k])
{
k=next0[k-1];
}
if(str2[i]==str2[k])
{
k++;
}
next0[i+1]=k;
}
}
int main()
{
while(cin>>str1>>str2)
{
next0[0]=-1;
next0[1]=0;
int n=str2.size(),len=str1.size();
qn(n);
int i=0,j=0,p=-1;
// next0[0]=0;
// next0[1]=0;
// while(i < len)
// {
// if(j == -1 || str1[i] == str2[j])
// {
// i++;
// j++;
// }
// else
// {
// j = next0[j];
// }
//
// if(j == n)
// {
// p = i - j;
// break;
// }
// }
while(i<len)
{
if(j==-1||str1[i]==str2[j])
{
j++;
i++;
if(j==n)
{
p=i-j+1;
break;
}
}
else
{
j=next0[j];
}
}
cout<<p<<endl;
}
}
、*****************************、
KMP
SDUT oj 2772
、****************************、
背包 dp
最新推荐文章于 2025-04-23 12:33:35 发布