水题200

HDU 1001  Sum Problem

In this problem, your task is to calculate SUM(n) = 1 + 2 + 3 + ... + n.For each case, output SUM(n) in one line, followed by a blank line. You may assume the result will be in the range of 32-bit signed integer.

思路:显然这就是个高斯公式sum=(n+1)*n/2,题目保证答案不爆int,但是!!!可能过程中会爆啊!!!

HDU 2007 平方和与立方和

给定一段连续的整数,求出他们中所有偶数的平方和以及所有奇数的立方和。 输入数据包含多组测试实例,每组测试实例包含一行,由两个整数m和n组成。
思路:注意输入的两个数的大小关系确定左右!!!
 
 
HDU 2035 人见人爱A^B
 
求A^B的最后三位数表示的整数。 说明:A^B的含义是“A的B次方”。
思路:既然是求最后三位,只需每次%1000。
 
 
DDU 1085 Holding Bin-Laden Captive!
 
给出1元,2元,5元的纸币数目,求最少不能组合的钱数。
思路:多重背包。(母函数解法待学) 多重背包注意边界值。
 
 
HDU 2094  产生冠军
 
题意:给你n对选手的比赛结果,判断其中是否决出冠军。规则为如果A打败了B,B又打败了C,而A与C之间没有进行过比赛,那么就认定,A一定能打败C。如果A打败了B,B又打败了C,而且,C又打败了A,那么A、B、C三者都不可能成为冠军。
思路:若恰有一个赢了比赛且没有输过比赛的选手,则产生冠军。用两个集合记录,一个集合记录出现的选手,一个集合记录输的选手。
 
 
HDU 2078 复习时间
 
题意:xhd复习有个习惯,在复习完一门课后,他总是挑一门更简单的课进行复习,而他复习这门课的效率为两门课的难度差的平方,而复习第一门课的效率为100和这门课的难度差的平方。xhd这学期选了n门课,但是一晚上他最多只能复习m门课,请问他一晚上复习的最高效率值。
思路:一开始用dp解决,对课程难度值由大到小排序,dp[i][j]表示已选i门课,最后一门课是j,转移方程为
dp[i][j]=max(dp[i][j],dp[i-1][k]+(course[k]-course[i])*(course[k]-course[i])) (0<=k<j)。
其实是个贪心问题,答案就是(100-最小难度)*(100-最小难度)。因为课程的选择难度值是递减的,应尽量选择差值大的,而最大差值即为100与最小难度。
 
 
HDU 2079 选课时间 01背包+多重背包或母函数(待学)
 
题意:给出k行数据 学分为a的课有b门,问总学分为n的组合数。
思路:k种学分的课看作01背包,每种学分的b门课看作多重背包。
#include<cstdio>
#include<cstring>
int f[45];
struct course {
    int f,num;
}cs[15];
int main() {
    int t,n,k;
    while(~scanf("%d",&t)) {
        while(t--) {
            scanf("%d%d",&n,&k);
            memset(f,0,sizeof f);f[0]=1;
            for(int i=0;i<k;i++) scanf("%d%d",&cs[i].f,&cs[i].num); 
            for(int i=0;i<k;i++) {
                for(int j=n;j>=cs[i].f;j--) {
                    for(int k=1;k<=cs[i].num && j-k*cs[i].f>=0;k++) { 
                        f[j]+=f[j-k*cs[i].f]; //!!
                    }
                }
            }
            printf("%d
",f[n]);
        }    
    }
    return 0;
} 
View Code
 
原文地址:https://www.cnblogs.com/LinesYao/p/5725453.html