08 2012 档案

摘要:题意:某穷人有n万美元申请m个学校,给出申请每个学校费用及拿到offer的概率,求起码得到一个offer的最大概率。Analyse:这是一个01背包问题。要求的是一个offer都拿不到的最小概率,f[i][j]=min{f[i-1][j],f[i-1][j-cost[i]]*fail_prob[i]}。View Code 1 #include<cstdio> 2 typedef struct 3 { 4 int cost; 5 double prob; 6 }school; 7 double f[10010]; 8 school a[10010]; 9 int main()1... 阅读全文
posted @ 2012-08-29 21:47 Hogg 阅读(334) 评论(0) 推荐(0)
摘要:题意:求递增子序列的和的最大值。Analyse:一开始想到的居然是把每个格子的加或不加都计算一次然后放在数组里面,再想一下发觉这就是暴力了。之后还是想到了动态规划的方法,因为a[n]能不能加进去只跟之前的子序列最后一个元素的大小有关,所以如果a[n]能加进去某个子序列里面的话,只需要用到这个子序列的最优解(而不需要其他情况的),而且要使a[n]为尾的子序列的和最大,要选一个之前的最大的子序列。因此递推式为dp[n]=max{dp[i],i=0,1,2......n-1}+a[n]或dp[n]=a[n]。View Code 1 #include<iostream> 2 using n 阅读全文
posted @ 2012-08-21 19:44 Hogg 阅读(613) 评论(0) 推荐(0)
摘要:题意:对给出的序列求最少的非升序列数目。Analyse:一开始以为用最长降序子序列来做,后来发现可以这样做:后面的数字如果比前面的所有子序列的最后一个都大,就必须要增加一个子序列(增加一个系统),否则可以添加到之前的子序列后面。View Code 1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 int a[100000]; 5 int main() 6 { 7 vector<int> dp; 8 vector<int>::size_type st; 9 int n, 阅读全文
posted @ 2012-08-21 11:01 Hogg 阅读(376) 评论(0) 推荐(0)
摘要:题意:n个平面最多可以将一个球体分成多少部分。Analyse:据大神记载,要把3维降成2维,递推公式F(n)=F(n-1)+f(n-1),F(n)为n个平面最多可以将一个球体分成的数目,f(n)为n条直线最多可以把一个平面分成的数目。View Code 1 #include<iostream>2 using namespace std;3 int main()4 {5 int n;6 while(cin>>n)7 cout<<((n-1)*n*(2*n-1)+3*n*(n-1))/12+n+1<<endl;8 return 0;9 } 阅读全文
posted @ 2012-08-17 16:06 Hogg 阅读(308) 评论(0) 推荐(0)