一个算法编程 A B C 三个岗位甲 30 50 25乙 35 30 20丙 45 40 30甲乙丙三人,用C#编写一个程序,算出三人一天共同创造的价值最大 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 DataTable _Table = new DataTable(); _Table.Columns.Add("名字"); _Table.Columns.Add("A"); _Table.Columns.Add("B"); _Table.Columns.Add("C"); _Table.Rows.Add(new object[] {"甲", 30, 50, 25}); _Table.Rows.Add(new object[] {"乙", 35, 50, 20}); _Table.Rows.Add(new object[] {"丙", 45, 40, 30});使用TABLE解决比较好玩 DataColumn _Column = new DataColumn("Count"); _Column.Expression = "convert(A,'System.Int32')+convert(B,'System.Int32')+convert(C,'System.Int32')"; _Table.Columns.Add(_Column); object _Object =_Table.Compute("Max(Count)",""); _Table.Columns.Remove(_Column); MessageBox.Show(_Object.ToString()); 我理解是每人只能从事一个岗位看哪种岗位的组合 创造的价值最大 就是遍历这个算法应该叫回溯 没什么优化 但能实现要求class Program { static int[,] data = new int[3, 3] { { 30, 50, 25 }, { 35, 30, 20 }, { 45, 40, 30 } }; //p[0]=0 甲 岗位 A //p[1]=1 乙 岗位 B static int[] p = new int[3] { -1, -1, -1 }; static int sum=0; static void Best(int n) { if (n <= -1) { int s=0; for (int j = 0; j < 3; j++) s += data[j, p[j]]; if (s > sum) sum = s; return; } for (int i = 0; i < 3; i++) { p[n] = i; if (!IsOK(n, p[n])) continue; Best(n - 1); } //Best(n - 1); } static bool IsOK(int n,int i) { for (int j = 2; j > n; j--) { if (p[j] == i) return false; } return true; } static void Main(string[] args) { Best(2); Console.WriteLine(sum); Console.ReadLine(); } } 不是批评你的意思,要自己动脑筋建立一个DataTable 甲乙丙是三条记录,一天记录有4个字段值,人名、A岗位钱、B岗位钱、C岗位钱,对岗位钱的大小进行排序,如果岗位多了依次类推,最近将多条记录的最大值相加 用订阅事件的方式跨线程操作,需要同步吗 SqlCommand类初始值设定项初始化类型失败 winform中让treeview选中节点失去焦点 如何避免UDP数据丢失 怎么能重绘窗体的标题栏? 请问如何引用???? VS2005有没有盗版卖啊,有人买过没,(一会就结贴) .net(c#)面试一般会出什么方面的题目? XmlDocument和XDocument,创建多个xml文件的难题!!!!! C# 字符串转换,麻烦大侠看看 (急)网站发布问题 C#关于同时编辑一条数据的问题
_Table.Columns.Add("A");
_Table.Columns.Add("B");
_Table.Columns.Add("C"); _Table.Rows.Add(new object[] {"甲", 30, 50, 25});
_Table.Rows.Add(new object[] {"乙", 35, 50, 20});
_Table.Rows.Add(new object[] {"丙", 45, 40, 30});使用TABLE解决比较好玩
DataColumn _Column = new DataColumn("Count");
_Column.Expression = "convert(A,'System.Int32')+convert(B,'System.Int32')+convert(C,'System.Int32')";
_Table.Columns.Add(_Column);
object _Object =_Table.Compute("Max(Count)","");
_Table.Columns.Remove(_Column);
MessageBox.Show(_Object.ToString());
看哪种岗位的组合 创造的价值最大 就是遍历
这个算法应该叫回溯 没什么优化 但能实现要求
class Program
{
static int[,] data = new int[3, 3] { { 30, 50, 25 }, { 35, 30, 20 }, { 45, 40, 30 } }; //p[0]=0 甲 岗位 A
//p[1]=1 乙 岗位 B
static int[] p = new int[3] { -1, -1, -1 }; static int sum=0; static void Best(int n)
{
if (n <= -1)
{
int s=0;
for (int j = 0; j < 3; j++)
s += data[j, p[j]]; if (s > sum)
sum = s; return;
} for (int i = 0; i < 3; i++)
{
p[n] = i;
if (!IsOK(n, p[n]))
continue;
Best(n - 1);
}
//Best(n - 1);
} static bool IsOK(int n,int i)
{
for (int j = 2; j > n; j--)
{
if (p[j] == i)
return false;
}
return true; } static void Main(string[] args)
{ Best(2); Console.WriteLine(sum); Console.ReadLine(); }
}
建立一个DataTable 甲乙丙是三条记录,一天记录有4个字段值,人名、A岗位钱、B岗位钱、C岗位钱,对岗位钱的大小进行排序,如果岗位多了依次类推,最近将多条记录的最大值相加