void spfa(){int index,i;while(!Q.empty()){index=Q.front();Q.pop();for(i=0;i<edge[index].size();i++){if(dist[edge[index][i].id]<dist[index]+edge[index][i].fa){ dist[edge[index][i].id]=dist[index]+edge[index][i].fa;//if(index!=mm)//mark[index]=0;flag[edge[index][i].id]++;if(flag[edge[index][i].id]>...
01背包问题;
有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。
这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。
用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:
F[i][v]=max{f[i-1][v],f[i][v-c[i]]+w[i]};f[i-1][v-c[i]]+w[i]表示在第i-1个背包在v-c[i]的容量下的价值+第i件物品的价钱。
在背包问题中,时间为O(NV)没办法优化,但是在空间上是可以优化的。可以...
n*n的棋盘,放n个皇后,互不攻击
一、当n%6 != 2 且 n%6 != 3时,有一个解为:
2,4,6,8,...,n, 1,3,5,7,...,n-1 (n为偶数)
2,4,6,8,...,n-1, 1,3,5,7,...,n (n为奇数)
(上面序列第i个数为ai,表示在第i行ai列放一个皇后;... 省略的序列中,相邻两数以2递增。下同)二、当n%6 == 2 或 n%6 == 3时,
(当n为偶数,k=n/2;当n为奇数,k=(n-1)/2)
k,k+2,k+4,...,n,-2,4,...,k-2,-k+3,k+5,...,n-1,-1,3,5...
线段树用于实现动态删除和插入某一线段的操作,进行扩张后可以求一个点在多少个线段上,线段一共有多长,求出线段的覆盖,等操作。
以下是来自http://hi.baidu.com/alpc62/blog/item/469edeca0043e382c8176875.html的blog,
要查看原文可以到他那里去看。
举例说明:已知线段[2,5] [4,6] [0,7];求点2,4,7分别出现了多少次
在[0,7]区间上建立一棵满二叉树:(为了和已知线段区别,用【】表示线段树中的线段)
【...
这几天放假耍了几天,没有ACM题可贴,就只有贴作业了,很水的作品请指教
源代码:
/*************************************** c++编程题 定义一个三角形类求三角形面积和周长 keloy 2008.4.7****************************************/#include <iostream>#include <math.h>using namespace std;class Ctriangle ...
用面向对象写的回文数:
请大家指教:
#include <iostream>#include <vector>using namespace std;class Panlindrome{ private: vector < char > t; int len; public: void Init_panlindrome() { char temp; this->len=0; while(cin >>temp&&temp!='@') { this->t.push_back(temp); this->len++; ...