您的位置:首页 > 编程语言

唯品会在线编程:爱情数字,动态规划

2016-04-16 11:36 232 查看


与0-1背包问题不同之处在于:同一个数字可以取多次。动态规划算法的关键是找出状态及状态转移关系,如下:





C++编码实现如下,如有问题,欢迎指出!

#include<iostream>
#include<vector>
using namespace std;

int max(int a,int b){
return a>=b?a:b;
}

int maxvalue(int a[],int n,int v){
if(v==0||a==NULL||n==0) return 0;
int i,j;
vector<vector<int>> vec(n,vector<int>(v+1,0));
for(i=1;i<n;i++){
for(j=1;j<=v;j++){
vec[i][j]=max(vec[i-1][j],vec[i][j-1]);
if(j>=a[i]){
int tmp=max(vec[i-1][j-a[i]]*10+i,vec[i][j-a[i]]*10+i);
vec[i][j]=max(vec[i][j],tmp);
}
}
}
return vec[n-1][v];
}

int main(){
int v,a[10];
int i,j;
while(cin>>v){
for(i=1;i<10;i++) cin>>a[i];
int res=maxvalue(a,10,v);
cout<<res<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: