double material = 6.3;
double size[3] = {0.5, 1, 2};
pair<int, double> dp[100][100][100];pair<int, double> get(pair<int, double>& p, int id)
{
if (size[id] > p.second)
return (make_pair(p.first+1, material - size[id]));
return (make_pair(p.first, p.second - size[id]));
}pair<int, double> minp(pair<int, double>& p1, pair<int, double>& p2)
{
if (p1.first < p2.first) return p1;
if (p1.first == p2.first)
{
if (p1.second > p2.second) return p1;
}
return p2;
}pair<int, double> go(int n1, int n2, int n3)
{
if (dp[n1][n2][n3].first != -1) return dp[n1][n2][n3]; pair<int, double> p1, np1, p2, np2, p3, np3;
np1.first = np2.first = np3.first = INT_MAX;
if (n1 > 0)
{
p1 = go(n1-1, n2, n3);
np1 = get(p1, 0);
}
if (n2 > 0)
{
p2 = go(n1, n2-1, n3);
np2 = get(p2, 1);
}
if (n3 > 0)
{
p3 = go(n1, n2, n3-1);
np3 = get(p3, 2);
} pair<int, double> min0 = minp(minp(np1, np2), np3);
dp[n1][n2][n3] = min0; return min0;
}void cal()
{
for (int i = 0; i < 100; i++)
for (int j = 0; j < 100; j++)
for (int k = 0; k < 100; k++)
dp[i][j][k] = make_pair(-1, 0); dp[0][0][0].first = 0;
dp[0][0][0].second = 0; go(10, 20, 30); cout << go(10, 20, 30).first << endl;
}
double size[3] = {0.5, 1, 2};
pair<int, double> dp[100][100][100];pair<int, double> get(pair<int, double>& p, int id)
{
if (size[id] > p.second)
return (make_pair(p.first+1, material - size[id]));
return (make_pair(p.first, p.second - size[id]));
}pair<int, double> minp(pair<int, double>& p1, pair<int, double>& p2)
{
if (p1.first < p2.first) return p1;
if (p1.first == p2.first)
{
if (p1.second > p2.second) return p1;
}
return p2;
}pair<int, double> go(int n1, int n2, int n3)
{
if (dp[n1][n2][n3].first != -1) return dp[n1][n2][n3]; pair<int, double> p1, np1, p2, np2, p3, np3;
np1.first = np2.first = np3.first = INT_MAX;
if (n1 > 0)
{
p1 = go(n1-1, n2, n3);
np1 = get(p1, 0);
}
if (n2 > 0)
{
p2 = go(n1, n2-1, n3);
np2 = get(p2, 1);
}
if (n3 > 0)
{
p3 = go(n1, n2, n3-1);
np3 = get(p3, 2);
} pair<int, double> min0 = minp(minp(np1, np2), np3);
dp[n1][n2][n3] = min0; return min0;
}void cal()
{
for (int i = 0; i < 100; i++)
for (int j = 0; j < 100; j++)
for (int k = 0; k < 100; k++)
dp[i][j][k] = make_pair(-1, 0); dp[0][0][0].first = 0;
dp[0][0][0].second = 0; go(10, 20, 30); cout << go(10, 20, 30).first << endl;
}
解决方案 »
- 我花三天多时间写的一个js俄罗斯方块
- 在后台添加,JS 广告代码,首页展示!
- 请问google或者baidu那个搜索栏textbox提示功能是怎么做的?
- 能不能通过字段来判断按钮是否显示?
- 必须声明标量变量 "@name"。
- 怎样把XML里面的所有内容(包括声明,标记,属性等)读到到TEXTBOX里面显示???
- 传参数丢东西。怎么办?
- 一个成功案例的表格通常包含哪些字段?
- 一个简单问题,datagrid模版列里面有一模版列......
- 请问如何动态地增加Table行
- 刚刚找到一个搜索引擎,大家帮我看看是什么语言编写的?
- DropDownList和ListSearchExtender3级联动的小问题
它们只读)
代码如下namespace Program
{
public class Translate
{
private double material = 6.3;
private double[] size = new double[]{0.5, 1, 2};
private KeyValuePair<int, double>[][][] dp = new KeyValuePair<int,double>[100][][]; public KeyValuePair<int, double> Get(KeyValuePair<int, double> p, int id)
{
if (size[id] > p.Value)
return (new KeyValuePair<int, double>(p.Key + 1, material - size[id]));
return (new KeyValuePair<int, double>(p.Key, p.Value - size[id]));
} public KeyValuePair<int, double> MinP(KeyValuePair<int, double> p1, KeyValuePair<int, double> p2)
{
if (p1.Key < p2.Key)
return p1;
if (p1.Key == p2.Key)
{
if (p1.Value > p2.Value)
return p1;
}
return p2;
} public KeyValuePair<int, double> Go(int n1, int n2, int n3)
{
if (dp[n1][n2][n3].Key != -1) return dp[n1][n2][n3]; KeyValuePair<int, double> p1 = new KeyValuePair<int, double>();
KeyValuePair<int, double> np1 = new KeyValuePair<int, double>(Int32.MaxValue, 0);
KeyValuePair<int, double> p2 = new KeyValuePair<int, double>();
KeyValuePair<int, double> np2 = new KeyValuePair<int, double>(Int32.MaxValue, 0);
KeyValuePair<int, double> p3 = new KeyValuePair<int, double>();
KeyValuePair<int, double> np3 = new KeyValuePair<int, double>(Int32.MaxValue, 0);
if (n1 > 0)
{
p1 = Go(n1 - 1, n2, n3);
np1 = Get(p1, 0);
}
if (n2 > 0)
{
p2 = Go(n1, n2 - 1, n3);
np2 = Get(p2, 1);
}
if (n3 > 0)
{
p3 = Go(n1, n2, n3 - 1);
np3 = Get(p3, 2);
} KeyValuePair<int, double> min0 = MinP(MinP(np1, np2), np3);
dp[n1][n2][n3] = min0;
return min0;
} public void Cal()
{
for (int i = 0; i < 100; i++)
{
dp[i] = new KeyValuePair<int, double>[100][];
for (int j = 0; j < 100; j++)
{
dp[i][j] = new KeyValuePair<int, double>[100];
for (int k = 0; k < 100; k++)
dp[i][j][k] = new KeyValuePair<int, double>(-1, 0);
}
} dp[0][0][0] = new KeyValuePair<int, double>(0, 0);
Go(10, 20, 30);
System.Console.WriteLine(Go(10, 20, 30).Key);
} static void Main(string[] args)
{
Translate t;
t.Cal();
}
}
}