C# 多个数组 组合 找出最接近

varcard1=newDictionary(){{"a1-1",10},{"a1-2",10},{"a1-3",10},{"a1-4",10},{"a1-5",10},... var card1 = new Dictionary
() { { "a1-1", 10 }, { "a1-2", 10 }, { "a1-3", 10 }, { "a1-4", 10 }, { "a1-5", 10 }, { "a1-6", 10 }, };var card2 = new Dictionary() { { "b1-1", 20 }, { "b1-2", 20 }, { "b1-3", 20 }, { "b1-4", 20 }, { "b1-5", 20 }, { "b1-6", 20 }, };var card3 = new Dictionary() { { "c1-1", 50 }, { "c1-2", 50 }, { "c1-3", 50 }, { "c1-4", 50 }, { "c1-5", 50 }, { "c1-6", 50 }, };var card4 = new Dictionary() { { "d1-1", 80 }, { "d1-2", 80 }, { "d1-3", 80 }, { "d1-4", 80 }, { "d1-5", 80 }, { "d1-6", 80 }, };var card5 = new Dictionary() { { "e1-1", 100 }, { "e1-2", 100 }, { "e1-3", 100 }, { "e1-4", 100 }, { "e1-5", 100 }, { "e1-6", 100 }, };var card6 = new Dictionary() { { "f1-1", 200 }, { "f1-2", 200 }, { "f1-3", 200 }, { "f1-4", 200 }, { "f1-5", 200 }, { "f1-6", 200 }, };

给定 150,应该是card5 提取一个值 card3提取一个值 这样组合得150; 返回 e1-? and c1-1
给定 200,应该是card6 提取一个值 得200;f1-1
要返回返回对应的 KEY

求算法~~
取最少组合,比如像取 200,直接在200数组取一个,而不是在 100 数组里取两个!
展开
 我来答
百度网友cfe4d0f
2014-10-06 · TA获得超过1502个赞
知道小有建树答主
回答量:937
采纳率:100%
帮助的人:869万
展开全部

可以使用贪心法  对所有可能取的值进行排序 然后遍历一次最大可能取出即可

考虑如下代码:

var card1=  .....

var all = new[]{card1,card2,card3,card4,card5,card6}
 .SelectMany(dict=>dict)
 .OrderBy(kv=>kv.Value).ToList();
var p = 150;
for(int i=all.Count-1;i>=0;i--) {
 if (p >= all[i].Value) {
  p -= all[i].Value;
  Console.WriteLine(all[i].Key+" "+all[i].Value);
  all.RemoveAt(i);
  if (p==0) break;
 }
}

当p=150时 返回

e1-6 100
c1-6 50

P=200时 返回

 f1-6 200
百度网友e1b1222
2014-09-28 · TA获得超过955个赞
知道小有建树答主
回答量:470
采纳率:66%
帮助的人:337万
展开全部
如果给定150,其实是可以取100+50,或者100+20+20+10,或者100+20+10+10+10,或者其他,给定的值不同相应的组合也不同,楼主是想取到所有可能的组合并返回相应的索引吗?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dhy86151
2014-09-28 · 超过20用户采纳过TA的回答
知道答主
回答量:106
采纳率:0%
帮助的人:38.1万
展开全部
循环遍历数组 获取value 与你要匹配的值相差最少的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阳光的雷咩咩
2014-10-07 · TA获得超过1.4万个赞
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:7879万
展开全部
写那么大一堆数据干嘛,还是没说清楚数据的结构。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式