http://acm.hdu.edu.cn/showproblem.php?pid=2159 #include<iostream> #include<string> #include<algorithm> using namespace std; #define N 105 int dp[N][N]; int n,m,k,s; struct MON { int exp; int cost; }g[N]; int solve() { int i,j,t; memset(dp,0,sizeof(dp)); //dp[i][j]=>杀怪i个,忍耐力为j能达到的max经验 for(j=1;j<=m;j++) { for(i=1;i<=s;i++) { for(t=1;t<=k;t++) if(j-g[t].cost>=0) dp[i][j]=max(dp[i][j],dp[i-1][j-g[t].cost]+g[t].exp); } if(dp[s][j]>=n) break; } return m-j; } int main() { int i; while(scanf("%d%d%d%d",&n,&m,&k,&s)!=EOF) { for(i=1;i<=k;i++) scanf("%d%d",&g[i].exp,&g[i].cost); printf("%d/n",solve()); } } http://acm.hdu.edu.cn/showproblem.php?pid=2577 #include<iostream> #include<string> #include<algorithm> using namespace std; #define N 105 string str; int dp[N][2]; bool isBig(char c) { if(c>='A'&&c<='Z') return true; return false; } int solve(string s) { int i,j;/* dp[0][0]=0; dp[0][1]=1;*/ if(isBig(s[0])) dp[0][0]=2,dp[0][1]=2; else dp[0][0]=1,dp[0][1]=2; for(i=1;i<s.length();i++) { if(isBig(s[i])) { dp[i][0]=min(dp[i-1][0]+2,dp[i-1][1]+2); dp[i][1]=min(dp[i-1][0]+2,dp[i-1][1]+1); } else { dp[i][0]=min(dp[i-1][0]+1,dp[i-1][1]+2); dp[i][1]=min(dp[i-1][0]+2,dp[i-1][1]+2); } } return min(dp[i-1][0],dp[i-1][1]+1); } int main() { int cas; scanf("%d",&cas); while(cas--) { cin>>str; printf("%d/n",solve(str)); } } http://acm.hdu.edu.cn/showproblem.php?pid=1176 #include<iostream> using namespace std; int dp[100010][11]; int pie[100010][11]; int i,j,k,m,n; int max(int a,int b,int c) { if(a>b) return a>c?a:c; else return b>c?b:c; } int main() { int cas,t,maxt; while(scanf("%d",&cas)!=EOF&&cas) { maxt=0; memset(dp,0,sizeof(dp)); memset(pie,0,sizeof(pie)); while(cas--) { scanf("%d%d",&k,&t); pie[t][k]++; if(maxt<t) maxt=t; } for(i=maxt;i>=0;i--) { dp[i][0]=max(0,dp[i+1][0],dp[i+1][1])+pie[i][0]; for(j=1;j<=9;j++) dp[i][j]=max(dp[i+1][j-1],dp[i+1][j],dp[i+1][j+1])+pie[i][j]; dp[i][10]=max(0,dp[i+1][9],dp[i+1][10])+pie[i][10]; } printf("%d/n",dp[0][5]); } return 0; }