POJ 2353
#include <fstream>
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <string>
#include <limits.h>
#include <algorithm>
#include <math.h>
#include <numeric>
#include <functional>
#include <ctype.h>
#define MAX 110
using namespace std;
double x[MAX],y[MAX],dp[MAX][MAX];
double dis(const int &i,const int &j)
{
return sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}
int main(void)
{
int n,ncase=1;
while(~scanf("%d",&n) && n)
{
for(int i=0;i<n;++i) scanf("%lf%lf",&x[i],&y[i]);
for(int i=0;i<n;++i)
for(int j=0;j<n;++j) dp[i][j]=1e10;
dp[0][0]=0.0;
for(int i=1;i<n;++i)
for(int j=0;j<i;++j)
{
dp[i][i-1]=min(dp[i][i-1],dp[i-1][j]+dis(i,j)); //慢的走到第i个点
dp[i][j]=min(dp[i][j],dp[i-1][j]+dis(i-1,i)); //快的走到第i个点
}
double ans=1e10;
for(int i=0;i<n;++i)
ans=min(ans,dp[n-1][i]+dis(i,n-1));
printf("%.2lf\n",ans);
}
return 0;
}
POJ 1182
//#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=5*1e4+7;
const int inf=0x3f3f3f3f;
int pre[N],dp[N];
int finds(int x)
{
if(x!=pre[x])
{
int xx=pre[x];
pre[x]=finds(pre[x]);
dp[x]=(dp[x]+dp[xx])%3;
}
return pre[x];
}
int main()
{
int i,j,k,t,tt=0;
int m,n;
//while(~scanf("%d%d",&n,&m))
scanf("%d%d",&n,&m);
{
for(i=0;i<=n;i++) pre[i]=i,dp[i]=0;
int ans=0;
while(m--)
{
int d,x,y,xx,yy;
scanf("%d%d%d",&d,&x,&y);
if(x>n||y>n||(d==2&&x==y)) {ans++;continue;}
xx=finds(x);yy=finds(y);d-=1;
if(xx==yy)
{
if((dp[y]-dp[x]+3)%3!=d) ans++;
}
else
{
pre[yy]=xx;
dp[yy]=(dp[x]-dp[y]+3+d)%3;
}
}
printf("%d\n",ans);
}
return 0;
}
POJ 4052
POJ 2791
HDU 5025
POJ 1085
POJ 1321
HDU 1667
http://bailian.openjudge.cn/practice/4132/
POJ 1185
http://bailian.openjudge.cn/2016acmfinal/f/
#include <iostream>
#include <string>
using namespace std;
int n, S, V[MAXN], d[MAXN], vis[MAXN];
const int MAXN = 10000;
const int INF = 100000000;
int dpmax(int S) {
if(vis[S]) return d[S];
vis[S] = 1;
int &ans = d[S];
ans = -1 << 30;
for(int i = 1; i <= n; ++i) {
if(S >= V[i]) ans = max(ans, dpmax(S - V[i]) + 1);
}
return ans;
}
int dpmin(int S) {
if(vis[S]) return d[S];
vis[S] = 1;
int &ans = d[S];
ans = -1 >> 30;
for(int i = 1; i <= n; ++i) {
if(S >= V[i]) ans = min(ans, dpmin(S - V[i]) + 1);
}
return ans;
}
int main() {
memset(vis, 0, sizeof(vis));
cin >> n >> S;
for(int i = 1; i <= n; ++i) {
cin >> V[i];
}
cout << dpmax(S) << endl;
cout << dpmin(S) << endl;
return 0;
}
NYOJ 117
http://bailian.openjudge.cn/2016acmfinal/q/
http://bailian.openjudge.cn/2016acmfinal/r/