您的位置:首页 > 其它

1068. Find More Coins

2013-10-10 19:59 323 查看
01背包问题

(1)排序数据为降序

(2)背包处理

// 1068. Find More Coins.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <string.h>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

#define max(a, b) ((a) > (b) ? (a) : (b))
const int N = 10003;
int coin
, dp[103];
vector<int> ans
;
typedef vector<int>::iterator IT;
typedef vector<int>::reverse_iterator RIT;

bool cmp(int m1, int m2){
return m1 > m2;
}

int main()
{
int n, total;
cin >> n >> total;
for(int i = 1; i <= n; i++)
cin >> coin[i];
coin[0] = 0;
sort(coin + 1, coin + 1 + n, cmp);
memset(dp, 0, sizeof(dp));
for(int i = 1; i <= n; i++){
for(int j = total; j >= coin[i]; j--){
if(dp[j] <= dp[j - coin[i]] + coin[i]){
dp[j] = dp[j - coin[i]] + coin[i];
ans[j].clear();
for(IT ite = ans[j - coin[i]].begin(); ite != ans[j - coin[i]].end(); ite++)
ans[j].push_back(*ite);
ans[j].push_back(coin[i]);
}
}
}
if(dp[total] != total)
cout << "No Solution" << endl;
else{
bool flag = true;
for(RIT ite = ans[total].rbegin(); ite != ans[total].rend(); ite++){
if(flag){
flag = false;
cout << *ite;
}
else
cout << " " << *ite;
}
cout << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: