poj-2979-陪审团的人选-C语言-动态规划

本文通过C语言实现POJ-2979题目的解法,利用动态规划策略解决陪审团人选问题。虽然算法表达不够优雅,运行时间稍长,欢迎探讨优化方案。
摘要由CSDN通过智能技术生成

算法丑陋,时间略长,还望指教。

#include <stdio.h>
#include <memory.h>
/*
第一步,读懂题意,题目的要求是使得选定方案,在辩控差最小的前提下,辩控和最大。
第二步,寻找状态,这道题的状态有两个比较关键的点,一是选了多少人,二是这些人的辩控差,如果我们知道已经选出m人时所有组合
的辩控差,从中选取一个是很容易的。所以我们把每个组合的状态记为(选取人数,辩控差)|——>辩控和,并用一个m*m*20*2的数组对状态
进行记录,而且还要考虑到一个状态可能没有对应的人数,而且还要记录具体是选取了那些人,所以我们规定不存在的状态对应辩控和为
-1,再用一个m*m*20*2的数组记录具体的人选。
第三步,状态转移,每次要再选一个人进来,怎么知道这个人到底能不能选呢?如果加入这个人之后,使我们对应状态的辩控和更大,那么
我们认为这是一个更优解。
这里如何避免重复选择也是一个问题,如果直接记录是非常不方便的,所以我们可以记录选择的过程,逆推选择了那些人
*/
int state[21][900],choise[21][900],times,answer[20];
int main()
{
    int n,m,i,j,k,a;
    scanf("%d%d",&n,&m);
    while(n)
    {
        int middleline=m*21;
        times++;
        memset(state,-1,sizeof(state));
        memset(choise,-1,sizeof(choise)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值