wikioi 1025 选菜

来源:互联网 发布:js 获取td的内容 编辑:程序博客网 时间:2024/06/05 18:06

http://wikioi.com/problem/1025/

首先一定要买的是必选菜

对于同一种菜(无论是不是必选菜),小松最多只会选择1

于是关键在判断

#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<cmath>using namespace std;int n,k;int x;int dp[1010];int is[110];int v[110],w[110];int b[110]={0};int main(){double a;cin>>n>>k>>a;x=a*10;for(int i=1;i<=n;i++){cin>>a;v[i]=a*10;//化成整数便于开数组}for(int i=1;i<=n;i++){cin>>w[i];}for(int i=1;i<=n;i++){int x;cin>>x;if(b[x])is[i]=1;//判断是否出现过,b[]编号else b[x]=i;}int nw=0,nv=0;for(int i=1;i<=k;i++)//必选{int x;cin>>x;int k=b[x];nw+=w[k];nv+=v[k];is[k]=1;//不买了}x=x-nv;for(int i=1;i<=n;i++)if(!is[i])//背包dp{for(int j=x;j>=v[i];j--){dp[j]=max(dp[j],dp[j-v[i]]+w[i]);}}printf("%d",dp[x]+nw); return 0;}


原创粉丝点击