选举规划
发布于2008年6月13日,星期五。
方式(n,v)=方式(n-1,v票[n])+方式(n-1,v)
整数64 方式(int n,int64 v) { 如果(n==0&&v==0) 返回1; 如果(v<0|n<=0) 返回0; 回程(n-1,v票[n-1])+回程(n-1,v); } printf(“精确获取270=%lld\n的方法”,方法(51270));
int64缓存[52][271];// 初始化为-1 整数64 方式(int n,int64 v) { 如果(n==0&&v==0) 返回1; 如果(v<0|n<=0) 返回0; if(缓存[n][v]==-1) 缓存[n][v]=方式(n-1,v-投票[n-1])+方式(n-1,v); 返回缓存[n][v]; } printf(“获取270的方法=%lld\n”,方法(51,270));
int64路[52][271];// 初始化为0 方式[0][0]=1; 对于(n=1;n=51;n++){ 对于(v=0;v<=270;v++){ 方式[n][v]=方式[n-1][v]; if(v票[n-1]>=0) 方式[n][v]+=方式[n-1][v-投票[n-1]; } } printf(“获取270的方法=%lld\n”,方法[51][270]);
int64路[52][271];// 初始化为0 方式[0][0]=1; 对于(n=1;n<=51;n++){ 对于(v=270;v>=0;v---){ 方式[n][v]=方式[n-1][total]; if(v票[n-1]>=0) 方式[n][v]+=方式[n-1][v-投票[n-1]; } } printf(“获取270的方法=%lld\n”,方法[51][270]);
int64路[271];// 初始化为0 方式[0]=1; 对于(n=0;n<51;n++) 对于(v=270;v>=票[n];v---) 方式[v]+=方式[v-投票[n]]; printf(“ways to get actually 270=%lld\n”,ways[270]);
int64路[400];// 初始化为0 方式[0]=1; 对于(n=1;n<=51;n++) 对于(v=270+票[n]-1;v>=票[n];v---) 方式[v]+=方式[v-投票[n]];
总计=0; 对于(v=270;v<400;v++) 总计+=方式[v]; printf(“获取至少270的最小方法=%lld\n”,总计);
#包括<stdio.h> typedef long long int64; int票[51]={ 55, 34, 31, 27, 21, 21, 20, 17, 15, 15, 15, 13, 12, 11, 11, 11, 11, 10, 10, 10, 10, 9, 9, 9, 8, 8, 7, 7, 7, 7, 6, 6, 6, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 三, }; int64路[400]; 整数 main(int argc,char**argv) { int n,v,代表; 总计int64; 对于(n=0;n<400;n++) 方式[n]=0; 方式[0]=1; 对于(n=0;n<51;n++) 对于(v=270+票[n]-1;v>=票[n];v---) 方式[v]+=方式[v-投票[n]]; 总计=0; 对于(v=270;v<400;v++) 总计+=方式[v]; printf(“%lld\n”,总计); 返回0; }
-
伊莎贝尔·卢戈 (2008年6月13日上午6:32) 谢谢! 我很高兴看到有人记录了这一点。 老实说,你的解决方案或类似的解决方案可能是我的解决方案的幕后黑幕; 最后,我把计算工作外包给了Maple,我不知道它在做什么。
-
杰克 (2008年6月15日下午2:12) O(2^51)不是等于O(1)吗?
-
斯蒂芬·施罗德 (2008年6月15日下午4:35) 杰克,是的。但是 2^51 只与美国的情况有关,而与问题的一般实例无关 n个 状态,提供运行时 O(2^n) ,不是 O(2^51)=O(1) . 请注意,即使函数 f(n) 可能由 克(n) 来自一些 编号0 今后,选择一个 O(克(n)) a上的算法 O(f(n)) 算法,如果知道典型输入将有大小 n<n0 .
-
S公司 (2008年6月16日上午11:23) 真正的问题不在于奥巴马或麦凯恩在分裂严重的战场州中表现如何,而在于我们首先不应该有战场州和旁观者州。 在总统选举中,每个州的每一次投票都应该与政治相关。 而且,每一票都应该平等。 我们应该在全国范围内对总统进行全民投票,其中白宫将投票给在所有50个州中获得最受欢迎选票的候选人。 全国普选法案将保证在所有50个州(和华盛顿特区)获得最受欢迎选票的候选人当选总统。 该法案只有在拥有大多数选举人投票权的州以同样的形式颁布,即有足够的选举人投票选举总统(538人中的270人)时才能生效。 该法案生效后,来自这些州的所有选举人票将授予在所有50个州(和华盛顿特区)获得最受欢迎选票的总统候选人。 现行总统选举制度的主要缺点是,总统候选人没有理由在他们安全领先或无望落后的州进行投票、访问、宣传、组织、竞选或担心选民的担忧。 这是因为“赢家通吃”规则将一个州的所有选举人票授予在每个州获得最多选票的候选人。 由于这一规则,候选人将注意力集中在少数几个分裂紧密的“战场”州。 三分之二的访问和资金集中在六个州; 88%来自9个州,99%的资金只流向16个州。 三分之二的州和人民只是总统选举的旁观者。 现行制度的另一个缺点是,候选人可以在没有赢得全国最受欢迎选票的情况下赢得总统大选。 全国普选法案已获得18个立法院的批准(科罗拉多州、阿肯色州、缅因州、北卡罗来纳州、罗德岛州和华盛顿州各有一个院,马里兰州、伊利诺伊州、夏威夷州、加利福尼亚州和佛蒙特州各有两个院)。 该法案已在夏威夷、伊利诺伊州、新泽西州和马里兰州制定为法律。 这些州拥有实施这项立法所需的270张选举人票中的50张(19%)。 请参见 http://www.NationalPopularVote.com
-
俄罗斯考克斯 (2008年6月16日下午12:10) @s: 欢迎访问政治博客。 这个博客只关心选举学院,因为它会导致有趣的编程问题。 我并不是说你的评论是对的还是错的,只是说它在这里不合适。
-
怪物 (2009年8月8日上午11:02) 此帖子已被作者删除。
-
怪物 (2009年8月8日上午11:04) 不错!! 从没想过这么容易。。 看看我的。。 如果你感兴趣,请发表评论。。 www.spyfree.info网站
-
小提琴手 (2011年3月26日下午4:07) 轻微打字错误: 方式[n][v]=方式[n-1][total]; 应该是 方式[n][v]=方式[n-1][v];