UVA 624

来源:互联网 发布:win7网络在哪里 编辑:程序博客网 时间:2024/06/05 03:51

  01背包的变形,把时间看做花费和价值即可,同事记录路径即可,一开始以为在相同价值下要尽量多的选额track,最后测试了一下发现只要满足条件即可:

#include <iostream>#include <cstring>#include <cstdio>using namespace std;int dp[100000];int pt[100000];int main(){//freopen("in.txt","r",stdin);int n;while(cin>>n){memset(dp,-1,sizeof(dp));int num,t;cin>>num;dp[0]=0;pt[0]=0;for(int i=1;i<=num;i++){cin>>t;for(int j=n-t;j>=0;j--) if(dp[j]!=-1){if(dp[j]+t>dp[j+t]){dp[j+t]=dp[j]+t;pt[j+t]=t;}}}int ans=n;while(dp[ans]==-1) ans--;int path[25],size=0,p=ans;while(p) {path[size++]=pt[p];p-=pt[p];}for(int i=size-1;i>=0;i--)cout<<path[i]<<" ";cout<<"sum:"<<ans<<endl;}return 0;}


 

0 0
原创粉丝点击