2013年4月14日

求01背包的第k大解

摘要: 这是一道求背包问题第k次大解。思路稍有点变法,就是在递归的过程中,分别用两个数组记录两种状态(选择或不选择),并且只要记录前k次。在这两个数组中都是前k次可能的最优解。所以我们只要把这两个数组做比较,一直排到k就行了,另外,对于递归问题,我们只要抓住某个状态的前后关系,把复杂问题简单化,不必去纠结全过程的状态,应为程序在运行时,递归过程是用堆栈实现的,其变化复杂,没必要每步弄懂。重点在于抓住前后规律和设计思路就可以了。#include<stdio.h>#include<string.h>int dp[1001][50],wi[100],di[100]; int n,m, 阅读全文

posted @ 2013-04-14 16:40 青竹士 阅读(248) 评论(1) 推荐(0) 编辑

ACM-josephus问题

摘要: View Code 1 #include<stdio.h> 2 #include<malloc.h> 3 typedef struct people 4 { 5 int num; 6 struct people *next; 7 }node; 8 void main() 9 {10 node *head,*p1,*p2;11 int n,m,i;12 while(scanf( "%d", &n )==1)13 { 14 head = p1 = (node *)malloc(sizeof(node)); 15 ... 阅读全文

posted @ 2013-04-14 13:32 青竹士 阅读(64) 评论(0) 推荐(0) 编辑

导航