求助
查看原帖
求助
602932
NumberTrart楼主2023/1/10 10:40

贪心还拿到90分呢,dp0分

#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
int n,w,v[105],p[105];
int ans;
map<int,int> dp,tdp;
int main()
{
    cin>>n>>w;
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d",v+i,p+i);
    }
    dp[0]=0;
    for(int i=1;i<=n;i++)
    {
        tdp=dp;
        /*也就是pair<int,int>的迭代器*/
        for(map<int,int>::iterator it=dp.begin();it!=dp.end();it++)
            if(it->first+v[i]<=w)
            {
                tdp[it->first+v[i]]=max(tdp[it->first+v[i]],tdp[it->first]+p[i]);
                ans=max(ans,tdp[it->first+v[i]]);
            }
        dp=tdp;
    }
    cout<<ans;
    return 0;
}
2023/1/10 10:40
加载中...